StructureMap IOC benannte Instanzen Hilfe
-
05-10-2019 - |
Frage
ein Problem mit StructureMap IOC zu haben. Ich möchte verschiedene konkrete Implementierungen von Objekten abzurufen, die die gleiche Schnittstelle basierend auf Etiketten oder Namen implementieren.
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());
}
}
Die Dokumentation ist nicht gut in dieser Hinsicht scheint, wie alle Beispiele da draußen sind veraltet ... mit der Version 2.6.1.0
Dank.
Lösung 2
Sowohl die originelle Art und amarsuperstar Weg, um tatsächlich Arbeit erscheint, war das Problem, dass der Umfang der Klasse ‚ObjectA‘ als internes erklärt worden war, zusammen mit einem internen Konstruktor. Ich änderte dies zu öffentlichen und jetzt kann IOC sieht es ... inverse Reflexion Anordnung innerhalb des StructureMap geschieht. Doh dumm von mir.
Andere Tipps
Thy die AddInstances
Methode mit Ihren benannten Instanzen hinzufügen
ObjectFactory.Initialize(x =>
{
x.For<IMyInterface>().AddInstances(i =>
{
i.Type<ObjectA>().Named("Foo");
i.Type<ObjectB>().Named("Bar");
});
});
Dies funktioniert für mich, aber stimme ich die Dokumentation kann manchmal ganz schön zwischen den Versionen irreführend sein, und es dauerte eine Weile, um diese beim ersten Mal zu erhalten.