簡短的問題:
確實溫莎城堡有類似Spring.Net的「查找方法注入」,可以從XML配置,它提供了獲取瞬時實例的能力的東西從沒有該類的容器知道IoC容器?城堡溫莎 - 查找方法注入瞬時實例
長問題:
我是一個長期的春/ Spring.Net用戶,我一直在嘗試溫莎城堡,試圖通過端口項目移交給它。 Spring.Net有「查找方法注入」這(從Spring文檔)的概念...
Lookup方法注入容器的覆蓋受容器管理的對象方法返回的結果的能力,在容器中查找另一個命名對象。查找通常包含一個原型對象,如前一節中所述。 Spring框架使用System.Reflection.Emit命名空間中的類動態生成一個覆蓋該方法的子類來實現此方法注入。
這意味着,如果我有以下...
public class SomeTransient
{
// ... I have dependencies that need to be filled by IoC container
}
public class SomeClass
{
public virtual void Work()
{
var o = CreateTransient();
}
public virtual SomeTransient CreateTransient() { }
}
我可以指示春天重寫CreateTransient方法,並讓該方法返回創建瞬態實例的新容器(與它的每次調用方法時都會初始化依賴項)。 這個獨特的部分是,它不需要直接鏈接到Spring框架(例如,SomeClass不必實現特定的接口)。
Castle Windsor有沒有類似的東西可以通過XML來實現?
(我最終會從XML配置搬走,但在那一刻,我只是想獲得它運行)
謝謝,這看起來像我需要去的方向。我從閱讀工廠文檔中看到的唯一問題是,SomeClass必須實際跟蹤瞬態的狀態並釋放創建的對象(通過工廠的Destroy),否則將不會收集垃圾,與Spring的實現不同,後者將實現垃圾收集當它超出範圍(像一個普通的對象)......這個解釋是否正確?或者我錯過了什麼? – 2010-10-27 19:09:54
關於我的評論......不要誤解我的意思,因爲工廠「擁有」了這個對象,所以這個實現很有意義。只是想確保我正確解釋文檔。 – 2010-10-27 19:44:35
Windsor可能會跟蹤您拉出的對象,如果它有一些與它關聯的工作,那麼當它超出範圍時必須完成。見http://kozmic.pl/archive/2010/08/19/must-windsor-track-my-components.aspx – 2010-10-27 21:31:31