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

时间:2012-07-04 14:57:06

标签: c# inversion-of-control structuremap

创建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方法可以修复吗?

1 个答案:

答案 0 :(得分:8)

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