3

StructureMapIOCに問題があります。ラベルまたは名前に基づいて同じインターフェイスを実装するオブジェクトのさまざまな具体的な実装を取得したいと思います。

internal static class InstanceHelper
{

    internal enum Taxonomy
    {
        Foo,
        Bar
    }

    static InstanceHelper()
    {
            // Initialize the container
            ObjectFactory.Initialize(x =>
            {
                x.For<IMyInterface>().Use<ObjectA>().Named(Taxonomy.Foo.ToString());
                x.For<IMyInterface>().Use<ObjectB>().Named(Taxonomy.Bar.ToString());
            });

    }

    internal static IMyInterface GetInstanceByTaxonomy(Taxonomy taxonomy)
    {

          // this raises an exception
          ObjectFactory.GetNamedInstance<IMyInterface>(taxonomy.ToString());

    }
}

ドキュメントはこの点で良くありません、そこにあるすべての例は非推奨になっているようです...バージョン2.6.1.0を使用しています

ありがとう。

4

2 に答える 2

1

メソッドを使用しAddInstancesて名前付きインスタンスを追加する

ObjectFactory.Initialize(x =>
{
    x.For<IMyInterface>().AddInstances(i =>
    {
        i.Type<ObjectA>().Named("Foo");
        i.Type<ObjectB>().Named("Bar");
    });
});

これは私にとってはうまくいきますが、ドキュメントがバージョン間でかなり誤解を招く可能性があることに同意します。初めてこれに到達するのに時間がかかりました。

于 2010-09-24T09:39:48.597 に答える
0

元の方法とamarsuperstarの方法の両方が実際に機能しているように見えますが、問題は、クラス'ObjectA'のスコープが内部コンストラクターとともに内部として宣言されていたことでした。これをパブリックに変更すると、IOCがそれを確認できるようになりました...StructureMapアセンブリ内で逆反射が発生しています。愚かな私。

于 2010-09-24T10:37:38.797 に答える