2011-05-13 21 views
6

在我們應用程序的核心中,我們使用Castle Windsor來管理我們的依賴關係。我們將從可能使用自己的IoC容器的第三方加載插件。我們希望他們能夠從核心獲得依賴關係,例如通過核心服務的構造器注入,還可以從他們自己的IoC容器中獲得依賴關係。溫莎能與另一個IoC容器合作嗎?

似乎如果他們提供了服務提供者接口,Windsor可以使用它來解決未知的依賴關係,忽略結果(因爲這些組件的生命週期是別人的業務)並繼續進行貨運。

但我也確信當你嘗試這樣的事情時會出現一些很棒的微妙之處。

+3

這是一個非常糟糕的主意。混合容器就像混合酒精 - 它永遠不會結束。 – 2011-05-13 09:01:59

+0

它似乎似乎是宿醉誘導,但我們確實不是第一個想要使用一個容器的應用程序,而是與選擇另一個容器的圖書館交朋友。 – 2011-05-13 15:36:26

+0

這聽起來像我們試圖在這裏解決同樣的問題。閱讀這篇文章:http://stackoverflow.com/questions/6238431/common-service-registry。你有沒有設法找到解決方案? – 2011-06-05 08:55:18

回答

6

這沒有必要。如果您啓用這些插件以使用構造函數注入以從主機應用程序獲取適當的服務,Castle Windsor可以正確連接插件。 PlugIns只是使用構造函數注入作爲一種方式來靜態聲明一個依賴項,所以只要Windsor可以解決依賴關係,PlugIn就會收到它。

每個PlugIn內部會發生什麼(包括使用其他容器),這與主機應用程序無關。

+0

但是這些程序員可能希望使用IoC來註冊他們自己的內核依賴關係,這是核心IoC從未聽說過的。 – 2011-05-13 13:17:22

+0

MEF通過屬性來解決這類問題。如果這種插件方案是您的應用程序的核心,那將是一個更好的選擇。 – 2011-05-13 13:41:21

+0

事實上,問題是,即使我們都很認真,並且使用構造函數注入來獲得我們的依賴關係,我們仍然有一種情況,沒有一個容器知道所有這些依賴關係,所以不能創建對象。我無法爲MyThing(ICoreService,IMyPluginService p)編寫構造函數,因爲核心容器可以滿足s而不是p,反之亦然,因爲插件的容器。 – 2011-05-13 16:27:34