3

When creating a StructureMap container, I typically do something like this:

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

Where

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

However, this has resulted in quite many registry.AddRegistry lines in a bootstrapper file, which is then copied into many projects. I would like to be able to call a method taking a constructed container and adding a registry to it, so I can modularize libraries.

I came up with this:

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

This works, in that the registry is properly added to the container (seen by calling container.WhatDoIHave() before and after), but it seems the actual mappings are not done - ie the interface IFoo is not registered to concrete class Foo that both are defined in My.Assembly.Name.

What is the difference in doing ImportRegistry and AddRegistry? Can my Setup method be fixed?

4

1 回答 1

9

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

于 2012-07-05T01:09:13.223 回答