2010-01-19 53 views
1

我剛剛創建一個WorkQueueService,它可以處理不同類型的WorkItems。對於每種類型的WorkItem,我將實現IWorkItemProcessor。我正在使用IoC,因此所有IWorkItemProcessor實現都將在容器中註冊。我的WorkQueueService將需要爲每個WorkItem獲取適當的處理器。什麼時候適合直接依賴IoC容器本身?

問題是我應該讓我的WorkQueueService直接依賴容器嗎?或者我應該將這個責任抽象成一個WorkItemProcessorFactory,它只是IoC容器的一個小包裝?

其他人在這種情況下做了什麼,爲什麼?

回答

3

建議您通過創建工廠來抽象容器。只有工廠應該知道容器。它有兩個好處:

  1. 國際奧委會容器,因爲很好的工廠提取;未來它可以被更好的容器取代。

  2. 與IOC容器交互的知識/複雜性被封裝在明確的工廠中。團隊中的所有成員無需瞭解特定IOC容器的功能。

+0

+1抽象工廠是解決這類DI挑戰的常見解決方案。你不應該直接依賴容器。 – 2010-01-19 11:18:19

0

IoC容器是一個工廠。我認爲沒有必要包裝它,除非你認爲你會交換不同的實現。

抽象是美妙的,但在某些時候所有的分層必須結束,你必須寫一個具體的實現。我看不到包裝IoC容器的價值。

爲什麼依賴性必須明確?如果WorkQueueService具有IWorkItemProcessor集合,其數量可以在您的IoC中進行配置,那麼爲什麼不像其他依賴項那樣注入集合呢?我不明白爲什麼WorkQueueService需要對IoC容器的引用。

+0

@duffymo:我想我可以給WorkQueueService WorkItemProcessors的集合,但是那就需要通過收集打獵找到每個工作項目相應的類型:我寧願給容器reposnsibility不管怎樣。 – 2010-01-19 11:00:54