注1:我想清楚:我不是試圖延遲加載依賴或注入懶惰類型。惰性依賴註冊與團結
大多數(所有?)IoC容器需要元數據與容器來描述如何當被問及某種類型應該可以解決註冊;這包括接口的實現,對象的生命週期等等。在過去幾年中,基於流利/慣例的API已經添加到大多數(所有)IoC容器中,這在提供這種容器時減少了很多噪音元數據到容器。
隨着ninject,我使用基礎的方法來註冊我的元數據的慣例,但是我做它的需求,而不是前期。在創建〜10個對象的集成測試場景中,這會節省巨大的性能;您將失去必須在每次測試中註冊整個應用程序依賴項的開銷。
注2:請不要告訴我,你不應該在集成測試使用IoC容器。
有一定的壓力移動到使用Microsoft組件時可用,所以團結就是在我的視野。我有基於約定的註冊工作,但我無法弄清楚如何在Ninject中按需要/懶洋洋地「發現」這些元數據。
我第一次嘗試實現這個是圍繞UnityContainer實例使用一個包裝器,並且在包裝器上調用GetInstance(type)時,我可以查詢容器以查看該類型是否已註冊。如果沒有,我可以調用我的約定,發現元數據並註冊類型。然而,這種方法只能深入一層。如果該類型注入更多的依賴關係,則每個依賴關係都不會反饋回GetInstance(type)方法,從而成爲我的困境。
問題:我怎樣才能懶洋洋地/點播型註冊添加到Unity?
來源將是很好的,但一個指向容器中的鉤會一樣好。我嘗試了繼承,但沒有什麼可以像Ninject一樣重寫。
你能舉一個例子嗎,你如何在Ninject中做到這一點?我可能能夠弄清楚如何在Unity中做同樣的事情。然而,直覺上,我同意這樣的觀點,即在大多數情況下,懶惰註冊沒有好處。在Unity中,註冊一個類型映射只是創建六個非常小的對象並將它們放入特定的集合中。它不能太慢可以嗎? – 2011-03-11 11:34:12