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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top