StructureMap COI instancias con nombre ayuda
-
05-10-2019 - |
Pregunta
Tener un problema con StructureMap COI. Deseo para recuperar diferentes implementaciones concretas de los objetos que implementan la misma interfaz basada en etiquetas o nombres.
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());
}
}
La documentación no es bueno en este sentido, parece que todos los ejemplos por ahí están en desuso ... utilizando la versión 2.6.1.0
gracias.
Solución 2
Tanto la forma original y la manera de amarsuperstar parece realmente funciona, el problema era que el alcance de la clase 'Objecta' había sido declarado como interna, junto con un constructor interna. He cambiado a este público y ahora COI puedo verlo ... reflexión inversa está sucediendo dentro de la StructureMap montaje. Doh tonto de mí.
Otros consejos
Tu utilizando el método AddInstances
a añadir sus instancias con nombre
ObjectFactory.Initialize(x =>
{
x.For<IMyInterface>().AddInstances(i =>
{
i.Type<ObjectA>().Named("Foo");
i.Type<ObjectB>().Named("Bar");
});
});
Esto funciona para mí, sin embargo estoy de acuerdo la documentación a veces puede ser muy engañoso entre versiones y me tomó un tiempo para llegar a esta la primera vez.