在创建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
中定义。
做ImportRegistry
和AddRegistry
有什么区别?我的Setup
方法可以修复吗?
你试过Container.Configure()
吗?它的存在是为了在初始化容器后对其进行配置。