Heim > Backend-Entwicklung > C++ > Konstruktorinjektion vs. Singleton oder Argumentübergabe in Unity: Welcher Ansatz der Abhängigkeitsinjektion ist der beste?

Konstruktorinjektion vs. Singleton oder Argumentübergabe in Unity: Welcher Ansatz der Abhängigkeitsinjektion ist der beste?

Barbara Streisand
Freigeben: 2024-12-27 22:13:10
Original
650 Leute haben es durchsucht

Constructor Injection vs. Singleton or Argument Passing in Unity: Which Dependency Injection Approach is Best?

Abhängigkeitsinjektion in Unity: Konstruktorinjektion vs. Singleton oder Argumentübergabe

Bei der Verwendung von Abhängigkeitsinjektions-Frameworks wie Unity gibt es eine entscheidende Überlegung zum Auflösen von Abhängigkeiten in tieferen Schichten einer Anwendung.

Im vorgestellten Szenario die TestSuiteParser-Klasse erfordert Zugriff auf TestSuite- und TestCase-Instanzen. Um dieses Problem anzugehen, werden mehrere Ansätze untersucht:

Singleton Unity Container

Das Erstellen eines Singletons zum Speichern des Unity-Containers ermöglicht den Zugriff auf den Container von überall in der Codebasis. Dieser Ansatz führt jedoch zu einer Abhängigkeit vom Container selbst, was alles andere als ideal ist.

Übergabe des Unity-Containers als Argument

Übergabe des Unity-Containers als Argument an alle Klasse, die Abhängigkeiten erfordert, kann umständlich und optisch unangenehm werden.

Konstruktor Injektion

Die bevorzugte Lösung für die Abhängigkeitsinjektion ist die Konstruktorinjektion. In diesem Muster werden Abhängigkeiten als Parameter im Klassenkonstruktor deklariert, wie in der TestSuiteParser-Klasse unten gezeigt:

public class TestSuiteParser
{
    private readonly TestSuite _testSuite;
    private readonly TestCase _testCase;

    public TestSuiteParser(TestSuite testSuite, TestCase testCase)
    {
        _testSuite = testSuite ?? throw new ArgumentNullException(nameof(testSuite));
        _testCase = testCase ?? throw new ArgumentNullException(nameof(testCase));
    }

    // ...
}
Nach dem Login kopieren

Durch die Konstruktorinjektion werden Abhängigkeiten automatisch vom Container aufgelöst, wenn eine Instanz der Klasse vorhanden ist erstellt. Dieser Ansatz stellt sicher, dass die Klasse bei der Instanziierung über die erforderlichen Abhängigkeiten verfügt.

Im Kompositionsstamm kann der Unity-Container wie folgt konfiguriert werden:

container.RegisterType<TestSuite, ConcreteTestSuite>();
container.RegisterType<TestCase, ConcreteTestCase>();
container.RegisterType<TestSuiteParser>();

var parser = container.Resolve<TestSuiteParser>();
Nach dem Login kopieren

Wenn der Container die TestSuiteParser-Instanz auflöst , fügt es automatisch die TestSuite und den TestCase ein Abhängigkeiten.

Fazit

Konstruktorinjektion bietet eine saubere und effiziente Möglichkeit, Abhängigkeiten in Einheit aufzulösen und die Nachteile der Singleton- oder Argumentübergabeansätze zu beseitigen. Dieser Ansatz fördert eine lose Kopplung und eine verbesserte Testbarkeit in Ihrer Anwendung.

Das obige ist der detaillierte Inhalt vonKonstruktorinjektion vs. Singleton oder Argumentübergabe in Unity: Welcher Ansatz der Abhängigkeitsinjektion ist der beste?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage