我在我的项目中使用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?
提前致谢:)
答案 0 :(得分:2)
你要做的事情应该是可能的。 Unity可能不知道如何构建HRepository<T>
。
HRepository<T>
班级是什么样的?具体来说,什么是构造函数参数,他们的任何类型都需要在Unity中注册?
如果Unity不知道如何构建其参数,Unity将无法解析HRepository<T>
。