3

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具象クラスに登録されていません。FooMy.Assembly.Name

ImportRegistryとの違いは何AddRegistryですか?私のSetup方法は修正できますか?

4

1 に答える 1

9

やってみましたContainer.Configure()か?コンテナがすでに初期化された後に設定するために存在します。

于 2012-07-05T01:09:13.223 に答える