转发解析到另一个容器

时间:2013-08-21 14:55:53

标签: c# structuremap

由于历史原因,我们的应用程序只有一个静态StructureMap Container,它可用于所有IoC / DI。我们有相当多的测试来检查这个容器是否正确设置,但是确保测试不会相互干扰变得越来越困难。我想开始分解几个(非静态)容器来缓解这个问题。要保持向后兼容性,此容器中配置的内容仍必须从主容器中可用。

我已经为系统的一小部分实现了概念验证,这种方式只处理几种基本类型:

_pocContainer = new Container(/* setup code */);
MainContainer.Configure(c => c.For<C>.Use(ctx => _pocContainer.GetInstance<C>());

这样做,并且当从静态容器请求C的实例时,它从_pocContainer解析。但是,我很确定这不是设计StructureMap时被认为是正常用例的东西。这会导致性能不佳,还是会产生其他负面影响?有没有更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:1)

一种可能的方法是将注册分为Registries并单独测试每个注册表。

public class FooRegistry : Registry {
    public FooRegistry() {
        For<IFoo>().Use<Foo>();
    }
}

然后,您可以在测试中明确使用注册表

var container = new Container(new FooRegistry());

但是,必须在撰写根目录中自动扫描所有注册表

var container = new Container(x => {
    x.Scan(scanner =>
    {
        scanner.TheCallingAssembly()
       scanner.LookForRegistries();
    });
});