初始化后将注册表添加到容器



在创建StructureMap容器时,我通常会执行以下操作:

var container = new Container(registry => {
    registry.AddRegistry<MyRegistry>();
});

哪里

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

但是,这导致引导程序文件中出现相当多的registry.AddRegistry行,然后将其复制到许多项目中。我希望能够调用一个方法,该方法采用构造的容器并向其中添加注册表,以便我可以模块化库。

我想出了这个:

public static void Setup(ref Container container) {
    container.PluginGraph.ImportRegistry(typeof(MyRegistry));
}

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

ImportRegistryAddRegistry有什么区别?我的Setup方法可以修复吗?

你试过Container.Configure()吗?它的存在是为了在初始化容器后对其进行配置。

最新更新