初始化后将注册表添加到Container

car*_*ett 3 c# structuremap inversion-of-control

在创建StructureMap容器​​时,我通常会这样做:

var container = new Container(registry => {
    registry.AddRegistry<MyRegistry>();
});
Run Code Online (Sandbox Code Playgroud)

哪里

public class MyRegistry : Registry {
    public MyRegistry() {
        Scan(x => {
            x.Assembly("My.Assembly.Name");
            x.RegisterConcreteTypesAgainstTheFirstInterface();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,这导致registry.AddRegistrybootstrapper文件中有很多行,然后将其复制到许多项目中.我希望能够调用一个方法来获取一个构造容器并为其添加一个注册表,因此我可以模块化库.

我想出了这个:

public static void Setup(ref Container container) {
    container.PluginGraph.ImportRegistry(typeof(MyRegistry));
}
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为注册表被正确地添加到容器中(通过调用container.WhatDoIHave()之前和之后看到),但似乎实际的映射没有完成 - 即接口IFoo没有注册到Foo定义的具体类My.Assembly.Name.

是什么在做差异ImportRegistryAddRegistry?我的Setup方法可以修复吗?

Jos*_*gan 8

你试过Container.Configure()吗?存在在已经初始化之后配置容器.