StructureMap,ObjectFactory和IContainer

时间:2010-01-26 18:06:22

标签: c# structuremap objectfactory

我正在使用StructureMap来满足我的IoC需求。

为了使事情愉快地测试,我尽可能地传递IContainer个实例,通常作为构造函数参数。为方便起见,我希望能够回归使用ObjectFactory作为无参数构造函数。

执行此操作的最简单方法是简单地获取IContainer ObjectFactory类包装并将其传递给其他构造函数。不幸的是,我找不到这个实例被公开曝光的任何地方。

问题是:

有没有办法在IContainer中获取ObjectFactory所以我可以像处理用户提供的实例一样处理它?<​​/ p>

或者,有没有办法将ObjectFactory的配置复制到新的Container实例中?

示例:

我希望能够做到以下几点:

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

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

    public IContainer Container { get; private set; }
}

1 个答案:

答案 0 :(得分:5)

ObjectFactory公开一个Container属性,该属性为您提供所需的IContainer。

任何时候你需要一个IContainer(通常不应该这样),你总是可以在你的班级ctor中依赖它。

public class INeedAContainer
{
    private readonly IContainer _container;

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

    // do stuff
}

我认为没有办法克隆IContainer。有一个container.GetNestedContainer()方法,它允许您在嵌套容器的生命周期内保持瞬态相同。嵌套容器通常在“using”语句中使用,并且非常便于控制数据库事务边界等事物的状态。