【问题标题】:StructureMap, ObjectFactory and the IContainerStructureMap、ObjectFactory 和 IContainer
【发布时间】:2013-06-01 10:57:00
【问题描述】:

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

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

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

问题是:

有没有办法在ObjectFactory 中获取IContainer,以便我可以像处理用户提供的实例一样简单地处理它?

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

示例:

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

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

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

    public IContainer Container { get; private set; }
}

【问题讨论】:

  • 如果我的回答没有达到目标。能举个使用例子吗?

标签: c# structuremap objectfactory


【解决方案1】:

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

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

public class INeedAContainer
{
    private readonly IContainer _container;

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

    // do stuff
}

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

【讨论】:

  • 我不确定这是否能给我答案。我已经更新了我的问题以澄清这种情况。
  • 感谢更新的答案。我翻过ObjectFactory 并没有找到任何Container 属性。在您的回答说应该有一个之后,我更新到最新版本和中提琴!谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多