我試圖使用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