在Unity中使用带有TEntity的Generic Repository

时间:2014-08-21 07:58:15

标签: c# asp.net-mvc unity-container repository-pattern

我正在学习如何在asp.net MVC 5项目中使用Unity Framework for Dependency Injection。

一般情况下,我会为我的存储库设置映射,如下所示:

public static void RegisterComponents()
{
    var container = new UnityContainer();

    // e.g. container.RegisterType<ITestService, TestService>();
    container.RegisterType<IModelRepository, ModelRepository>();

    DependencyResolver.SetResolver(new UnityDependencyResolver(container));
}

是否可以使用如下所示的通用存储库执行此操作:

 public class GenericRepository<TEntity> 
       : IGenericRepository<TEntity> where TEntity : class
 { /* ... */ }

出于本能,我会设置并注册这样:

container.RegisterType<IGenericRepository<TEntity>, GenericRepository<TEntity>>();

哪个不起作用。

我是否需要为每个模型类型注册一个通用存储库?

container.RegisterType<IGenericRepository<Model1>, GenericRepository<Model1>>();
container.RegisterType<IGenericRepository<Model2>, GenericRepository<Model2>>();
container.RegisterType<IGenericRepository<Model3>, GenericRepository<Model3>>();
...
container.RegisterType<IGenericRepository<Model_N>, GenericRepository<Model_N>>();

或者有没有办法为所有模型类和控制器注入一次这个存储库?

1 个答案:

答案 0 :(得分:10)

您可以通过以下方式注册任何TEntity的泛型类型:

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

请参阅Unity 2.1Unity 3上的msdn(注册Open Generics部分)