2017-04-05 28 views
1

我使用Unity for IoC,我想遵循How not to do dependency injection中規定的原則。所以沒有全局可用的容器,整個代碼都沒有mContainer.Resolve<Type>(),但是構造器注入。統一選擇適當的容器

我的問題是將這些原理應用於多個容器。我的應用程序比較了許多產品(遵循共享模型的對象),並且每個產品都由它自己的容器進行配置。

我正在尋找一種方法來使每個「產品」(可以看作是一個有很多孩子的對象)使用它自己的容器,而不指定該容器。這些容器可以是子容器或命名容器,我不認爲這有什麼區別?

我已經看過統一擴展名,但還沒有找到答案。

+0

每個物體都有不同的容器?我確定我誤解了一些東西,但是你能澄清一下嗎? – Tipx

+0

我不想爲每個**對象提供一個容器。但是,我有多個「產品」(從相同的類層次派生的對象,但由於其具體的細節而表現不同)。每個產品都應該使用自己的容器來註冊它自己的派生類。 – Moolie

+1

嗯,我可以理解有多個容器出於表演的原因,MAYBE,但只要兩個不同容器中的兩個實體之間有鏈接,就不會有美好的時光。對於同一個基類/抽象類的不同實現,如果只在運行時才知道正確的分辨率,那麼肯定會使用命名註冊,或者在某些情況下使用工廠。 – Tipx

回答

0

當我寫這個問題的時候,我在介紹依賴注入到現有的代碼基礎上的細節時有點失落。這個問題寫得不太好,我當時意識到這一點,但我不知道如何改進我對問題的解釋。

這就是說,這是我如何解決我的問題。

正如我所說,我有一個應用程序比較多個產品。這些產品可以被認爲是同一接口的多個實現。所以我需要同時使用這些多個實現。所有這些產品實際上都是複雜的對象,具有多個依賴關係,並且許多這些對象都是使用運行時數據構建的,因此不會通過構造注入創建。

我的問題是沒有通過構造函數注入創建的對象。當他們需要構建時,我已經失去了當前產品的背景,並且無法爲該產品創建適當的類型。

我爲每個產品創建了子容器,以定義每個產品的特定接口需要哪些實現。

在某些時候,我創建了一個產品實例。這是代碼中唯一需要相應容器的地方(例如:給我產品X的子容器)。我需要做的就是創建一個工廠對象(它具有對適當容器的引用),並將它傳遞給需要動態解析組件的每個對象,即不是通過構造器注入。

這是缺失的環節。我仍然想知道工廠是否真的需要知道容器,但我可以忍受。

我希望這可以幫助別人。