2

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

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

最简单的方法(我认为)是简单地获取类包装并将IContainerObjectFactory传递给另一个构造函数。不幸的是,我找不到这个实例公开暴露的任何地方。

问题是:

有没有办法让我IContainer可以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; }
}
4

1 回答 1

5

ObjectFactory 公开了一个 Container 属性,它为您提供了您正在寻找的 IContainer。

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

public class INeedAContainer
{
    private readonly IContainer _container;

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

    // do stuff
}

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

于 2010-01-26T21:16:40.047 回答