Unity - 接受Type <t> </t>的寄存器接口

时间:2012-12-15 20:18:10

标签: asp.net asp.net-mvc-4 unity-container

使用Unity,我试图将以下界面注册到模型:

public interface IGenericRepository<T> : IDisposable where T : class

这是在Unity的Bootstrapper中注册它的正确方法吗?

            container.RegisterType<IGenericRepository<TypeBasedOverride>, GenericRepository<TypeBasedOverride>>(new HierarchicalLifetimeManager());

1 个答案:

答案 0 :(得分:1)

我想你想为任何具体的T注册该界面。 如果是这样,您需要将泛型类型注册为开放泛型类型(不带类型参数)。请检查此msdn entry

在你的例子中:

container.RegisterType(typeof(IGenericRepository<>), typeof(GenericRepository<>), new HierarchicalLifetimeManager());

这样,当您请求IGenericRepository<SomeClass>的实例时,Unity将为您提供GenericRepository<SomeClass>的实例,无论SomeClass的具体类型如何。