我试图使用DI和构造器注入下面的通用仓库接口:如何使用依赖注入使用泛型的存储库接口?
public interface IRepository<TEntity> : IDisposable where TEntity : class
的问题是为了定义的接口的实例,我必须提供一流的类型是这样的:
private IRepository<Person> _personRepository;
这个问题是如果我使用DI(并且我正在使用Unity for IoC框架),那么我必须在我的构造函数中定义多个实例来获取我需要使用的所有存储库接口,如下所示:
public MyClass(IRepository<Person> personRepository,
IRepository<Orders> ordersRepository,
IRepository<Items> itemsRepository,
IRepository<Locations> locationsRepository)
{
_personRepository = personRepository;
_OrdersRepository = ordersRepository;
_itemsRepository = itemsRepository;
_locationsRepository = locationsRepository;
}
个
问题:
- 这样行吗?
- 如果不是我失去了这个概念的地方?
- 即使这是正确的,注册Interface到具体类型的Unity有什么意义?我已经做到了,因为通用的存储库迫使我声明。
请帮我解决这个问题,我感谢您的帮助!
我希望我可以做的是有'IRepository repository'作为方法的参数,但我知道这是行不通的。你能解释为什么它不会吗?感觉错了,所有这些都通过了,但也许它是正确的,我是过度思考。 –
atconway
由于每个存储库都是不同的类型,MyClass(显然)需要4个不同的存储库。你必须分别提供具体的类。以某种方式注入多个依赖关系并不错(或不常见)。 –
但是什么时候需要额外的方法呢? – krypru