StructureMap CIO instances nommées aide
-
05-10-2019 - |
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.
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.