Exkurs: Dependency-Injection (Konzept)

Die sogenannten SOLID-Prinzipien des objektorientierten Designs fassen einige (nicht alle) wichtige Prinzipien zusammen, um ein gutes Software-Design zu erstellen. Damit ist es dann möglich, einfacher und risikoloser Erweiterungen vorzunehmen. Hierzu gehört das Prinzip Dependency Inversion, das in Schleupen.CS insbesondere verwendet wird, um das Onion-Modell auf Komponentenebene hinsichtlich der Abhängigkeitsbeziehung zur Compile-Zeit zu definieren. Dependency-Injection (DI) ist dabei eine Technik zur Implementierung von Dependency Inversion, die festlegt, wie die Bausteine Service-Fassade, Assembler, Usecase Controller, Repository, etc. lose zur Compile-Zeit gekoppelt werden. Wichtig dabei ist, dass DI kein Tool ist, sondern eine Methodik. In Schleupen.CS wird zur einfacheren Implementierung das Tool, der sog. Dependency Injection Container (DI-Container), Castle Windsor im Standard verwendet.

Ziel ist es also, wie in der folgenden Abbildung, ein Objekt vom Typ Motor in ein Objekt vom Typ Auto zu injizieren.

Hier ist allerdings die Kopplung von Auto zu Motor zur Compile-Zeit vorhanden. Diese Abhängigkeit werden wir nun ausbauen.

Dies gelingt durch einziehen einer Schnittstelle und der Implementierung als Strategiemuster. Nur wie werden diese Bausteine dann zur Laufzeit verknüpft? Hier kommt die DI ins Spiel, in dem durch eine externe Fabrik - der DI-Container oder manuell - die konkrete Instanz eines Motors in das Auto per Konstruktor gesetzt wird.

Die Kopplung von Auto zu Motor zur Compile-Zeit ist nun verschwunden!

Im Code liest sich DI wie folgt:

public class Auto
{
   private readonly IMotor motor;

   public Auto(IMotor motor) // Constructor Injection
   {
      this.motor = motor;
   }
}

public class Motor : IMotor
{
}

Neben der hier beschriebenen Constructor Injection gibt es beispielsweise auch die Property Injection, die wir allerdings nur an wenigen Stellen einsetzen.

Cookie Consent mit Real Cookie Banner