我正在学习如何在 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<>));
关于c# - 在 Unity 中将通用存储库与 TEntity 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25421101/