Frage

Ich arbeite mit StructureMap für meine IoC Bedürfnisse.

Um die Dinge angenehm prüfbar, ich vorbei IContainer Instanzen um, wo immer möglich, in der Regel als Konstruktorparameter. Als Bequemlichkeit, würde Ich mag zu können, mit ObjectFactory für einen parameterlosen Konstruktor zurückzugreifen.

Der einfachste Weg (dachte ich), dies zu tun wäre einfach die IContainer die ObjectFactory Klasse Wraps zu bekommen und dass Konstruktor auf dem anderen übergibt. Leider kann ich nicht überall diese Instanz öffentlich ausgesetzt finden.

Die Frage ist:

Gibt es eine Möglichkeit, die IContainer innerhalb ObjectFactory zu bekommen, damit ich es so einfach wie eine vom Benutzer bereitgestellte Instanz verarbeiten kann?

Alternativ ist es eine Möglichkeit, die Konfiguration des ObjectFactory in eine neue Container Instanz zu kopieren?

Beispiel:

Ich möchte in der Lage sein, folgendes zu tun:

public class MyClass
{
    public MyClass()
    {
        Container = ... // The ObjectFactory container instance.
    }

    public MyClass(IContainer container)
    {
        Container = container;
    }

    public IContainer Container { get; private set; }
}
War es hilfreich?

Lösung

Object legt einen Container Eigenschaft, die Ihnen die IContainer gibt, die Sie suchen.

Immer, benötigen Sie einen IContainer (was nicht oft sein sollte) man immer eine Abhängigkeit von ihm in Ihrer Klasse ctor nehmen.

public class INeedAContainer
{
    private readonly IContainer _container;

    public INeedAContainer(IContainer container)
    {
        _container = container;
    }

    // do stuff
}

Ich glaube nicht, gibt es eine Möglichkeit, eine IContainer zu klonen. Es gibt eine container.GetNestedContainer () -Methode, die Sie Ihre Transienten das gleiche gilt für die gesamte Lebensdauer des verschachtelten Behälter halten können. Verschachtelte Behälter werden häufig in einer „using“ Anweisung verwendet und sind sehr praktisch für den Stand der Dinge wie Datenbanktransaktionsgrenzen zu steuern.

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