c# - 在 Unity 中将通用存储库与 TEntity 结合使用

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

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

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

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

或者有没有办法为所有模型类和 Controller 注入(inject)一次这个存储库?

最佳答案

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

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

参见 Unity 2.1 上的 msdn或 Unity 3 (注册开放泛型部分)

关于c# - 在 Unity 中将通用存储库与 TEntity 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25421101/

相关文章:

c# - 如何从 ConfigureServices() 中访问 CreateDefaultBuilder() 提供的 IConfiguration?

html - 用户登录后呈现不同的 View

c# - Unity容器-在所有线程中获取单例

jquery - JQGrid加载下拉列表数据

c# - 在 MVVM 中解析 Prism 服务

c# - 如何使用 Unity 容器解决 Web API 中依赖项的依赖关系?

c# - 将空 XML 元素反序列化为 Guid.Empty

c# - 如何使用 Midi 点网类在 C# 中读取打击乐音符值

c# - 如何在 LINQ 中获取和使用分组源?

asp.net-mvc - MVC 的 HTTP 缓存 - Last-Modified 响应 header 始终等于日期