Unity.Mvc3 解析 Interface 类型
我在我的项目中使用 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>>();
我收到以下异常:
依赖关系解析失败,类型 = “Data.IRepository
1[Data.Models.User]”,名称 =“(无)”。例外 发生时:解决时。例外是: InvalidOperationException - 类型 HRepository
1 不能是 建造的。您必须配置容器来提供此值。
我做错了什么?实际上可以使用 .RegisterType
吗?
也许我需要某种自定义的 DependencyResolver?
提前致谢 :)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你想做的事情应该是可能的。 Unity 可能不知道如何构建
HRepository
。HRepository
类是什么样的?具体来说,构造函数参数是什么?它们的类型是否需要向 Unity 注册?如果 Unity 不知道如何构造其参数,它将无法解析
HRepository
。What you are trying to do do should be possible. Unity may not know how to build
HRepository<T>
.What does the
HRepository<T>
class look like? Specifically, what are the constructor parameters and do any of their types need to be registered with Unity?Unity will not be able to resolve
HRepository<T>
if it does not know how to construct its parameters.