【问题标题】:Using Generic Repository with TEntity in Unity在 Unity 中使用带有 TEntity 的通用存储库
【发布时间】:2014-08-21 07:58:15
【问题描述】:

我正在学习如何在 asp.net MVC 5 项目中使用 Unity Framework 进行依赖注入。

一般来说,我会像这样为我的存储库设置一个映射:

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>>();

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

【问题讨论】:

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


    【解决方案1】:

    您可以通过这种方式为任何 TEntity 注册泛型类型:

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

    查看Unity 2.1Unity 3 上的msdn(注册开放泛型部分)

    【讨论】:

    • 文字墙,让我错过了这一部分——或者导致我不理解它。十分感谢。这就像一个魅力,为我节省了很多代码。
    猜你喜欢
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多