StructureMap IOCという名前のインスタンスヘルプ
-
05-10-2019 - |
質問
StructureMap IOCに問題があります。ラベルや名前に基づいて同じインターフェイスを実装するオブジェクトのさまざまな具体的な実装を取得したいと思います。
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を使用して
ありがとう。
解決 2
元の方法とAmarsuperstarの両方の方法が実際に機能しているように見えます。問題は、クラス「Objecta」の範囲が内部コンストラクターとともに内部として宣言されていたことでした。私はこれを公開に変更しましたが、IOCはそれを見ることができます...逆の反射はStructureMapアセンブリ内で起こっています。愚かな私。
他のヒント
あなたを使って AddInstances
名前付きインスタンスを追加する方法
ObjectFactory.Initialize(x =>
{
x.For<IMyInterface>().AddInstances(i =>
{
i.Type<ObjectA>().Named("Foo");
i.Type<ObjectB>().Named("Bar");
});
});
これは私にとってうまくいきますが、ドキュメントがバージョン間で非常に誤解を招く可能性があることに同意します。
所属していません StackOverflow