2010-01-26 69 views
2

我正在使用StructureMap來滿足我的IoC需求。StructureMap,ObjectFactory和IContainer

爲了使事情愉快地測試,我通過​​實例儘可能通常作爲構造函數參數。爲了方便起見,我希望能夠使用ObjectFactory作爲無參數的構造函數。

最簡單的方法(我認爲)要做到這一點,只需簡單地獲取​​ObjectFactory類包裝並將其傳遞給其他構造函數。不幸的是,我無法找到這個實例公開的任何地方。

的問題是:

有沒有辦法讓內ObjectFactory的​​,所以我可以簡單地處理它爲用戶提供的實例?

或者,有沒有辦法將ObjectFactory的配置複製到新的Container實例中?

例子:

我想能夠做到以下幾點:

public class MyClass 
{ 
    public MyClass() 
    { 
     Container = ... // The ObjectFactory container instance. 
    } 

    public MyClass(IContainer container) 
    { 
     Container = container; 
    } 

    public IContainer Container { get; private set; } 
} 
+0

如果我的答案錯過了商標。你能舉一個用例嗎? – KevM 2010-01-26 21:17:34

回答

5

的ObjectFactory公開了一個容器屬性,讓你你正在尋找的IContainer。

無論何時您需要一個IContainer(不應該經常這樣),您可以隨時在您的課堂上依賴它。

public class INeedAContainer 
{ 
    private readonly IContainer _container; 

    public INeedAContainer(IContainer container) 
    { 
     _container = container; 
    } 

    // do stuff 
} 

我不認爲有一種方法來克隆IContainer。有一個container.GetNestedContainer()方法允許您在嵌套容器的生命週期中保持瞬態。嵌套容器通常在「using」語句中使用,對於控制事務狀態(如數據庫事務邊界)非常方便。

+0

我不確定這是否爲我提供了答案。我已更新我的問題以澄清情況。 – 2010-01-27 21:33:07

+0

感謝您的更新答案。我在'ObjectFactory'上查找並沒有找到任何'Container'屬性。你的回答說應該有一個,我更新到最新版本和violla!謝謝。 – 2010-01-29 18:46:04