2010-01-14 88 views
1

從配置文件讀取我的項目中執行Unity IOC時遇到了一些麻煩。如何在我的情況下使用/配置Unity Container IOC

這裏是我有什麼

1)ClasslibraryA

2)ClasslibraryB引用ClasslibraryA

3)WinForms應用程序引用ClasslibraryB

注:一些其它的應用程序將引用ClassLibraryA,如。一個Web服務。

ClasslibraryA必須根據IOC的使用位置進行配置。 例如。如果在Web服務中調用IDataSource,並且從本地應用程序調用它,IDataSource將會有所不同。

ClasslibraryB將擁有自己的一套依賴關係,並由主應用程序注入,本例中爲winforms應用程序。 ClasslibraryB將在一個循環中實例化許多ClasslibraryA對象。

Winforms應用程序將包含ClassLibraryB的依賴實現的具體實現,並且應該在這裏調用Container.Configure?

我的問題是,

何時何地我叫Container.Configure應用程序?
我是否需要所有子庫層/子層的子容器?
應該classlibraryB或winforms實現ClasslibraryA的具體類被注入classlibraryA嗎? 我應該在配置文件中將每個層/層的IOC配置分組爲不同的「容器」名稱嗎?

回答

3

每個應用程序擁有一個獨立容器並負責配置該容器實例。配置和調用解決方案應儘可能接近應用程序的入口點。這被稱爲組合根

您的Windows窗體應用程序應該擁有,配置和解析其引導代碼中的容器。也可能有其他也使用ClassLibraryA的應用程序完全不相關。

Web服務應該擁有另一個容器並對其進行配置以滿足其需要。它對Windows窗體應用程序一無所知。

這裏是關於構成根的更多信息:

所有的庫應該是完全DI容器無關,這樣你可以使用任何容器(和任何容器實例)來連接所有的依賴關係。

在這裏看到更多的細節:

正如你可能會注意到,這些是一般原則和適用於DI整體 - 不只是統一。

0

應該叫Container.Configure在應用程序的開始,但ClassLibraryA應該手動接收的依賴,或許具有被稱爲insantiate的將WebMethod(或要求國際奧委會的實例)的權利類型

相關問題