I have a situation where I need to get a concrete class by name from an open generic base class.
My class hierarchy :
public class Foo { }
public class Bar { }
public abstract class OpenGenericBaseClass<T> where T : class { }
public class ConcreteClass1 : OpenGenericBaseClass<Foo> { }
public class ConcreteClass2 : OpenGenericBaseClass<Bar> { }
My registry code:
For(typeof(OpenGenericBaseClass<>)).Use(x => x.GetInstance<ConcreteClass1>());
For(typeof(OpenGenericBaseClass<>)).Add(x => x.GetInstance<ConcreteClass2>()).Named("Class2");
My program code:
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");
The first call to GetInstance method (for c1) return a good "ConcreteClass1" object. However for the second call (for c2) I get an exception: StructureMap Exception Code: 200 Could not find an Instance named "Class2" for PluginType TestStructureMapGeneric.OpenGenericBaseClass`1
How can I get my c2 named concrete instance ?
Thanks for your help.