У меня есть консольное приложение с конфигой:Простейшее ват интегрировать Unity с MVC3
<?xml version="1.0" encoding="utf-8" ?> <configuration>
<configSections>
<section name="unity" type=
"Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,
Microsoft.Practices.Unity.Configuration" />
</configSections>
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<assembly name="UnityDi.Contracts" />
<assembly name="UnityDi.Domain" />
<assembly name="UnityDi.Services" />
<assembly name="UnityDi.Repositories" />
<namespace name="UnityDi.Contracts" />
<namespace name="UnityDi.Domain" />
<namespace name="UnityDi.Services" />
<namespace name="UnityDi.Repositories" />
<container>
<register type="IUser" mapTo="User"></register>
<register type="IUserService" mapTo="UserService"></register>
<register type="IUserRepository" mapTo="UserRepository"></register>
</container>
</unity>
</configuration>
и Program.cs
namespace UnityDi.Console
{
using System;
using Contracts;
using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.Configuration;
public static class Program
{
private static readonly IUnityContainer Container =
new UnityContainer().LoadConfiguration();
public static void Main()
{
var dummyUserOne = GetUserReference();
dummyUserOne.UserId = 1;
dummyUserOne.FullName = "Bilbo Baggins";
var dummyUserTwo = GetUserReference();
dummyUserTwo.UserId = 2;
dummyUserTwo.FullName = "Frodo Baggins";
var userService = GetUserServiceReference();
userService.Add(dummyUserOne);
userService.Add(dummyUserTwo);
var users = userService.GetAllUsers();
foreach (var user in users)
{
Console.WriteLine(user.FullName);
}
Console.ReadLine();
}
private static IUser GetUserReference()
{
return Container.Resolve<IUser>();
}
private static IUserService GetUserServiceReference()
{
return Container.Resolve<IUserService>();
}
}
}
Это работает очень хорошо.
Я много искал и обнаружил, что опубликованные решения интеграции Unity с MVC3, по-видимому, очень многословны в своем подходе.
В контексте приведенного выше кода (и с требованием сначала связать код Entity Framework), какой способ SIMPLEST для интеграции Unity с MVC3 и работать с моими данными, как указано выше?
Я хочу использовать тот же подход к созданию объектов в MVC, как указано выше.
Спасибо!
Richard
P.s. Самое близкое, что я нашел, было Unity.Mvc, но я не могу заставить его работать, как указано выше. Я, наверное, глупый. Это ново для меня.
EDIT: Работа с предлагаемым ответом.
В Web.config для приложения MVC (с добавлением Unity.Mvc пакета)
[snip]
<container>
<register type="IUser" mapTo="User"></register>
<register type="IUserService" mapTo="UserService"></register>
<register type="IUserRepository" mapTo="UserRepository">
<lifetime type="HierarchicalLifetimeManager" />
</register>
</container>
Затем в Bootstrapper.cs
namespace Unity.Mvc.Resources
{
using System.Web.Mvc;
using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.Configuration;
using Unity.Mvc3;
public static class Bootstrapper
{
public static void Initialise()
{
var container = BuildUnityContainer();
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
}
private static IUnityContainer BuildUnityContainer()
{
var container = new UnityContainer().LoadConfiguration();
container.RegisterControllers();
return container;
}
}
}
Затем в контроллере (бит из a- га, когда я понял, что интерфейс может быть любым Единством, о котором известно, включая его собственное):
private readonly IUnityContainer container;
public HomeController(IUnityContainer container)
{
this.container = container;
}
public ActionResult Index()
{
var dummyUserOne = GetUserReference();
dummyUserOne.UserId = 1;
dummyUserOne.FullName = "Bilbo Baggins";
var dummyUserTwo = GetUserReference();
dummyUserTwo.UserId = 2;
dummyUserTwo.FullName = "Frodo Baggins";
var userService = GetUserServiceReference();
userService.Add(dummyUserOne);
userService.Add(dummyUserTwo);
var users = userService.GetAllUsers();
return View(users);
}
private IUser GetUserReference()
{
return container.Resolve<IUser>();
}
private IUserService GetUserServiceReference()
{
return container.Resolve<IUserService>();
}
И снова он работает :)
Это просто выходит из аспекта Entity Framework. Необходимо подключить DbContext для работы с объектами домена, не вводя дополнительных зависимостей ... Любые указатели? Действительно, очень ценю.
см. Мое изменение ниже –