Unity.Mvc3解析Interface <t> </t>的类型

时间:2011-09-09 20:29:25

标签: asp.net-mvc-3 inversion-of-control unity-container

我在我的项目中使用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?

提前致谢:)

1 个答案:

答案 0 :(得分:2)

你要做的事情应该是可能的。 Unity可能不知道如何构建HRepository<T>

HRepository<T>班级是什么样的?具体来说,什么是构造函数参数,他们的任何类型都需要在Unity中注册?

如果Unity不知道如何构建其参数,Unity将无法解析HRepository<T>