2011-02-08 8 views
1

我有我的Unity被配置爲能夠使用我自己的生命週期管理器(每個http請求)解析多種類型。現在在一個特殊的初始化方法中,我需要獲得已解析類型結構的新實例,並且我不希望這些實例被存儲並在後續調用中使用Resolve調用=對於這種特殊方法,我需要瞬態生命期管理器。解析類型時可以更改配置的生存期管理器嗎?

我想避免第二個容器配置,因爲它將是第一個與不同的終生管理者的副本。解決類型時可能以某種方式覆蓋生命期管理器配置?

這個問題是我的previous question真實的,因爲我正在尋找更好的方式來做到這一點。

編輯:

我知道我可以創建多個命名註冊但需要對子級一生改變經理人,只是因爲再創建配置的重要組成部分。

回答

1

我想 - 正如您所注意到的 - 我們可以使用兩種不同的生命週期配置的單獨註冊。但是,您似乎對此設置不滿意,並且您希望在註冊時通過生命週期。

我的建議是創建一個擴展方法,它需要一個額外的生命週期,並檢查容器的這種註冊,如果它不存在,它會註冊它並返回您需要的設置。

但說實話,我確實有這個方法的問題,即使這種方法存在於框架中。 IoC容器刪除依賴關係的相關知識,但是您將此知識添加回客戶端/依賴關係,其中對照 IoC原則。

1

您可以使用子容器進行特殊解析。只需在子容器中爲您關心的類型註冊一個新的生命期管理器(TransientLifetimeManager聽起來像你想要的)。它會從父母那裏註冊一切,所以你不需要重做大量的註冊。

但我同意Aliostad--這種設計的味道不對,但沒有更多關於你在做什麼的細節,我無法真正提出替代方案。

+0

設計是絕對錯誤的。問題在於我們將參數(通過ParameterOverrides)傳遞給創建的依賴關係中的一個對象。對於常見的處理,它是可以的。但是對於這個特殊的初始化方法,我們需要傳遞其他參數。具有此參數的Instnace不能用於請求的其餘部分。 –

相關問題