我有一種情況,我需要從一個開放的泛型基類中按名稱獲取具體類。StructureMap open generic
我的類層次結構:
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找不到名爲「等級2」爲PluginType TestStructureMapGeneric.OpenGenericBaseClass`1一個實例
我怎樣才能讓我的C2命名具體實例?
感謝您的幫助。
嗨@Nekresh,我正在使用開放的泛型基類來p使用虛擬方法來幫助我用不同的對象類型組織工作流。我不能使用簡單的基類,因爲我失去了共享泛型行爲的好處。 – klettier