2011-05-02 39 views
1

某些項目有一些反轉控制組件。控制容器與「一個通用」容器的多次反轉

這些組件工作在不同的概念領域 - 商業,圖形用戶界面,全球化,存儲... - 。

這將是您的解決方案?

  • 單個容器中的所有組件。
  • 每個概念區域的容器。

我會欣賞利弊。

感謝您的努力提前!

+0

我發現這個與我的問題有關的其他問題:http://stackoverflow.com/questions/879930/is-it-correct-to-have-many-castle-windsor-containers-per-application-if -those-con – 2011-05-02 12:22:44

回答

1

爲了保持一致性,我建議您對所有概念區域使用相同的容器實現(AutoFac,Unity,Spring whaterver)。

如果每個概念區域不需要保留一個容器,那就這樣做。對於相同的依賴關係(例如IEmailService),您將避免出現問題,您需要差異概念區域(RemoteEmailService,LocalEmailService)的不同實現。一個缺點是如果你有共享的組件,你需要跟蹤它們並將它們註冊到每個區域的每個容器中。

如果您的IOC實現支持父 - 子容器(AutoFac),則可以在每個子容器中的父容器和特定組件中共享組件。

如果您的IOC實現難以在每個區域使用單獨的容器,請不要與之對抗,要麼更改它,要麼使用一個全局容器,但在註冊組件時要小心。

無論如何確保你的代碼是IOC實現不可知的。通過這種方式,您可以從「每件東西的一個容器」開始,然後根據需要轉移到「每個區域的容器」。

+0

+1我在.NET 4.0上使用Castle Windsor。這是你對概念區域分離的描述,這個答案的動機是什麼。我發現一個很好的論點是組件實現相同的界面,但在不同的領域。啊,我沒有考慮使用不同的IoC實現,而是使用相同IoC API的不同容器。現在我腦子裏有什麼(也許它沒有在你的文本中回答)?性能考慮。多個容器會影響應用程序/服務啓動時間。你怎麼看待這件事? – 2011-05-02 12:19:10

+0

我不會擔心性能,直到我有一些清晰的分析器結果。實際上,您是否可以使用所有組件在一個容器中測量多個容器的影響,每個容器的組件數量較少?我還沒有使用windsor,但一個快速谷歌顯示它支持親子容器 - 也許你也可以用這些配置文件進行測試。如果啓動時間是一個真正的性能問題,您可以開始應用基於探查器輸出的其他優化。 – 2011-05-02 12:43:24

+0

是啊,我用Google搜索了一下,發現子容器支持。我無法評估性能影響,因爲目前這個項目並不是那麼大,但在不久的將來它將會是一個很大的項目。啓動時間非常重要,因爲它是一個Web客戶端應用程序和一個WCF服務,但正如您所說的,這可以在稍後進行優化。我會將你的答案標記爲正確答案,因爲你提供了足夠的信息(兒童和/或多容器方法)。非常感謝你。 – 2011-05-02 12:58:30