オープン ジェネリック基本クラスから具体的なクラスを名前で取得する必要がある状況があります。
私のクラス階層:
public class Foo { }
public class Bar { }
public abstract class OpenGenericBaseClass<T> where T : class { }
public class ConcreteClass1 : OpenGenericBaseClass<Foo> { }
public class ConcreteClass2 : OpenGenericBaseClass<Bar> { }
私のレジストリコード:
For(typeof(OpenGenericBaseClass<>)).Use(x => x.GetInstance<ConcreteClass1>());
For(typeof(OpenGenericBaseClass<>)).Add(x => x.GetInstance<ConcreteClass2>()).Named("Class2");
私のプログラムコード:
ObjectFactory.Configure(
x => x.Configure(
a => a.Scan(
b =>
{
b.AssembliesFromApplicationBaseDirectory();
b.LookForRegistries();
})));
var c1 = ObjectFactory.GetInstance(typeof(OpenGenericBaseClass<>));
var c2 = ObjectFactory.GetNamedInstance(typeof(OpenGenericBaseClass<>), "Class2");
GetInstance メソッド (c1 用) への最初の呼び出しは、適切な「ConcreteClass1」オブジェクトを返します。ただし、2 回目の呼び出し (c2 の場合) では例外が発生します: StructureMap Exception Code: 200 Could not find an Instance named "Class2" for PluginType TestStructureMapGeneric.OpenGenericBaseClass`1
c2 という名前の具体的なインスタンスを取得するにはどうすればよいですか?
ご協力いただきありがとうございます。