我正在使用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; }
}
答案 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”语句中使用,并且非常便于控制数据库事务边界等事物的状态。