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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top