Question

Un problème avec StructureMap du CIO. Je souhaite récupérer différentes implémentations concrètes des objets qui mettent en œuvre la même interface basée sur des étiquettes ou des noms.

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 documentation est de ne pas bon à cet égard, semble que tous les exemples là-bas sont déconseillés ... en utilisant la version 2.6.1.0

merci.

Était-ce utile?

La solution 2

Tant la manière et la manière de amarsuperstar originale semble effectivement le travail, le problème était que la portée déclarée comme interne, classe « ObjectA » avait avec un constructeur interne. J'ai changé cela public et maintenant du CIO peut le voir ... la réflexion inverse se produit dans l'ensemble StructureMap. Doh stupide moi.

Autres conseils

Thy en utilisant la méthode AddInstances pour ajouter vos instances nommées

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

Cela fonctionne pour moi, mais je suis d'accord la documentation peut parfois être tout à fait trompeur entre les versions et il m'a fallu un certain temps pour arriver à ce la première fois.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top