我有一种情况,我需要从一个开放的通用基类中按名称获取一个具体类。
我的班级层次结构:
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”对象。但是对于第二次调用(对于 c2),我得到一个异常: StructureMap 异常代码:200 找不到 PluginType TestStructureMapGeneric.OpenGenericBaseClass`1 的名为“Class2”的实例
我怎样才能得到我的 c2 命名的具体实例?
谢谢你的帮助。