Я использую Unity.Mvc3 в своем проекте, и в него встроено UnityDependencyResolver .
var container = BuildUnityContainer();
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
, а метод BuildUnityContainer выглядит следующим образом:
private static IUnityContainer BuildUnityContainer()
{
var container = new UnityContainer()
.RegisterType<IControllerActivator, HControllerActivator>()
.RegisterType<IDatabaseFactory, DatabaseFactory>(
new HierarchicalLifetimeManager())
.RegisterType<IUnitOfWork, UnitOfWork>(new HierarchicalLifetimeManager())
.RegisterType<IRepository<Article>, HRepository<Article>>()
.RegisterType<IRepository<ContentBase>, HRepository<ContentBase>>()
.RegisterType<IRepository<User>, HRepository<User>>()
.RegisterType<IRepository<Profile>, HRepository<Profile>>();
container.RegisterControllers();
return container;
}
но когда я пытаюсь разрешить мой тип следующим образом:
var users = DependencyResolver.Current.GetService<IRepository<User>>();
я получаю следующее исключение:
Не удалось разрешить зависимость, type = "Data.IRepository 1[Data.Models.User]", name = "(none)". Exception
occurred while: while resolving. Exception is:
InvalidOperationException - The type HRepository
Невозможно создать 1. Вы должны сконфигурировать контейнер для предоставления этого значения.
Что я делаю не так? И возможно ли на самом деле использовать .RegisterType<IFoo<T>, Foo<T>>()
? Может быть, мне нужен какой-то пользовательский DependencyResolver?
Заранее спасибо:)