Domanda

Avere un problema con StructureMap CIO. Vorrei recuperare diverse implementazioni concrete di oggetti che implementano la stessa interfaccia basata su etichette o nomi.

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 documentazione non è a buon a questo proposito, sembra che tutti gli esempi là fuori sono deprecato ... utilizzando la versione 2.6.1.0

Grazie.

È stato utile?

Soluzione 2

Sia il modo originale e il modo di amarsuperstar sembra in realtà il lavoro, il problema era che l'ambito della classe 'Objecta' era stata dichiarata come interno, insieme ad un costruttore interna. Ho cambiato questo per pubblico e ora CIO riesco a vederlo ... riflessione inversa che sta accadendo all'interno del StructureMap assemblaggio. Doh sciocco me.

Altri suggerimenti

La tua utilizzando il metodo AddInstances per aggiungere i tuoi istanze denominate

ObjectFactory.Initialize(x =>
{
    x.For<IMyInterface>().AddInstances(i =>
    {
        i.Type<ObjectA>().Named("Foo");
        i.Type<ObjectB>().Named("Bar");
    });
});

Questo funziona per me, ma io sono d'accordo la documentazione a volte può essere molto fuorviante tra le versioni e mi c'è voluto un po 'per arrivare a questo la prima volta intorno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top