4 Stimmen

Was leistet ein Dependency Injection Framework für Sie?

Ich verstehe das Grundkonzept von Injektion von Abhängigkeiten . Anstatt eine Menge globaler Zustände zu haben, geben Sie stattdessen das, was Sie brauchen, an die Konstruktoren Ihrer verschiedenen Objekte weiter.

Aber ich verstehe nicht, wie dieses Konzept auf einen Rahmen angewendet werden kann? Was leistet ein Dependency Injection Framework für Sie und wann sollten Sie es einsetzen?

5voto

Jon Skeet Punkte 1325502

Der Rahmen hakt alles für Sie auf der Grundlage einer Art von Konfiguration (ob das ist Code, eine XML-Datei usw.).

Im Grunde sind es Klempnerarbeiten.

Viele DI-Frameworks umfassen auch aspektorientierte Programmierung, Objektlebenszyklusmanagement usw., aber die Grundlagen der DI bestehen darin, Ihre Anwendung mit miteinander kommunizierenden Objekten zum Laufen zu bringen.

Anders ausgedrückt: Das DI-Framework ist der Teil des Codes, der die Konstruktoren aufruft und dem Ganzen sagt, dass es ausgeführt werden soll, wenn es fertig ist :)

1voto

David Punkte 33347

Ich verwende es vor allem, weil ich damit neue Implementierungen eines Objekts einfügen kann, ohne es neu kompilieren zu müssen. Ich kann einfach eine Konfigurationsdatei ändern und meine Objekte werden korrekt miteinander verbunden.

0voto

Dave Swersky Punkte 34052

Der beste Weg, um herauszufinden, wie nützlich sie sind, ist, ein paar davon auszuprobieren. Ich hatte vor, die Spring.NET einen Versuch, es sieht nach einer guten Umsetzung aus.

0voto

Nick Van Brunt Punkte 14922

Eine Sache, die ich an AOP wirklich mag, ist, dass es wirklich einfach ist, zwischen einer Entwicklungs- und einer Produktionsversion zu wechseln. Man kann eine sehr ausführliche Protokollierung erstellen und dann im Grunde einen xml-Schalter umlegen und schon ist es weg.

0voto

eglasius Punkte 35447

Einer der Hauptvorteile der Verwendung von DI/IOC ist die Reduzierung der Kopplung zwischen verschiedenen Klassen.

Wenn Sie diesen Ansatz verwenden, müssen Sie eine Hierarchie von Objekten konfigurieren, die die Abhängigkeiten ausdrücken, die Sie aus ihrem Code herausgenommen haben. Dies kann zu einer Menge Code führen. Selbst wenn Sie den Code-Teil eines DI-Frameworks verwenden, kann es den Umfang der Konfiguration erheblich reduzieren, indem es Ihnen eine ausdrucksvollere Konfiguration ermöglicht:

  • Wann immer ein ILogger benötigt wird, verwenden Sie eine FileLogger.
  • Sie können sogar noch weiter gehen mit Konventionen, wenn eine
    I[Name]Controller wird angefordert
    ersetzen Sie es durch [Name]Controller.
  • Sie können es Singleton verwalten lassen Objekte für Sie verwalten. Ihr Code ist also derselbe wie bei jedem anderen
    Abhängigkeit, aber die DI stellt sicher, dass dass Sie immer die gleiche Instanz erhalten immer dieselbe Instanz

Ich verwende einige Strukturkartenkonfigurationen:

    ForRequestedType<ILogger>().TheDefaultIsConcreteType<NLogLogger>();
    //the following injects any property that has a type 
    //that implements IController. (overcomes a regular asp.net limitation with DI)
    SetAllProperties(
         p => p.TypeMatches(t => t.IsConcreteAndAssignableTo(typeof(IController)))
    );

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X