2010-01-26 36 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