创建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
方法可以修复吗?
答案 0 :(得分:8)
你试过Container.Configure()
吗?存在在容器初始化之后配置容器。