Frage

Wie kann ich übergeben Argumente an einen Konstruktor in einem IOC-Framework? Ich möchte so etwas wie: (Der Versuch, IOC-Rahmen Agnostiker zu sein;))

object objectToLogFor = xxx;
container.Resolve<ILogging>(objectToLogFor); 

public class MyLogging : ILogging
{
    public MyLogging(object objectToLogFor){}
}

Es scheint, dass dies in StructureMap nicht möglich ist. Aber ich würde gerne jemand beweisen, mich falsch zu sehen.

Sind andere Frameworks mehr feature-rich? Oder bin ich mit dem IOC-Framework in der falschen Richtung?

War es hilfreich?

Lösung

In der Struktur der Karte können Sie diese mit der Mit-Methode erreicht werden:

string objectToLogFor = "PolicyName";
ObjectFactory.With<string>(objectToLogFor).GetInstance<ILogging>();

Siehe auch: http://codebetter.com/blogs/jeremy.miller/archive/2008/09/25/using-structuremap-2-5-to-inject-your-entity -Objekte-in-services.aspx

Andere Tipps

Schloss Windsor:

var foo = "foo";
var service = this.container.Resolve<TContract>(new { constructorArg1 = foo });

Beachten Sie die Verwendung eines anonymen Objektkonstruktor Argumente angeben.

mit StructureMap:

var foo = "foo";
var service = container.With(foo).GetInstance<TContract>();

Wie kann diese sprachunabhängig sein? Dies ist die Umsetzung Detail des Rahmens in Frage.

Frühling alows Sie c'tor args als Werteliste / Referenzen angeben, wenn das Ihr Ding ist. Es ist nicht sehr gut lesbar, aber im Vergleich zu Eigentum Injektion.

Einige Leute heiß unter dem Kragen darüber, und darauf bestehen, dass c'tor Injektion ist der einzige Thread-sicheren Ansatz in Java. Technisch sind sie richtig, aber in der Praxis neigt es keine Rolle.

Es sollte nicht eine sehr häufige Notwendigkeit sein, aber manchmal ist es ein gültiger. Ninject , die leichter als StructureMap ist, können Sie die Parameter zu übergeben, wenn Sie aus dem Kontext transiente Objekte abgerufen werden. Spring.NET zu.

Die meisten der Zeit, Objekte in einem IoC-Container deklariert sind nicht vorübergehend, und akzeptieren andere nicht-transiente Objekte durch Konstrukteuren / Eigenschaften / Methoden als Abhängigkeiten.

Wenn Sie jedoch wirklich wan't den Behälter als eine Fabrik zu verwenden, und wenn Sie genügend Kontrolle über die Objekte haben Sie lösen möchten, können Sie Eigenschaft oder Methode Injektion auch verwenden, wenn es weniger natürlich klingt und riskanter in einige Art und Weise.

Ja, andere Frameworks sind feature-rich - benötigen Sie eine IoC-Framework verwenden, die für Konstruktor Injektion ermöglicht. Der Frühling ist ein Beispiel für einen mehrsprachigen ioc Container, die Konstruktor Dependency Injection ermöglicht.

Andere IoC Frameworks sind reich an Funktionen.

d. Besuche die ParameterResolution mit Autofac

Sie können auch tun, mit Windsor leicht

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