Heim >Backend-Entwicklung >C++ >Wie sollte ich für eine ordnungsgemäße Abhängigkeitsinjektion auf den Unity-Container in meiner Anwendung zugreifen?

Wie sollte ich für eine ordnungsgemäße Abhängigkeitsinjektion auf den Unity-Container in meiner Anwendung zugreifen?

DDD
DDDOriginal
2024-12-29 13:11:14460Durchsuche

How Should I Access the Unity Container in My Application for Proper Dependency Injection?

So handhaben Sie den Zugriff auf Unity-Container in einer Anwendung

Bei der Verwendung eines Dependency-Injection-Frameworks wie Unity ist es wichtig zu überlegen, wie Sie mit dem Zugriff umgehen zum Container in Ihrer Anwendung. Diese Frage untersucht drei Optionen und untersucht den besten Ansatz gemäß den Prinzipien der Abhängigkeitsinjektion.

Singleton-Container:

Erstellen eines Singleton-Containers, auf den Sie überall in der Anwendung zugreifen können scheinen praktisch zu sein. Die Einführung einer Abhängigkeit vom Container zur Verwendung eines Dependency-Injection-Frameworks widerspricht jedoch den Prinzipien von DI.

Übergabe des Containers:

Die Übergabe des Unity-Containers an untergeordnete Klassen kann möglich sein werden umständlich und optisch unattraktiv. Außerdem führt es zu einer engen Kopplung und erschwert das unabhängige Testen Ihres Codes.

Konstruktorinjektion:

Der richtige Ansatz für DI ist die Verwendung von Konstruktorinjektion. Dazu gehört die Deklaration der Abhängigkeiten, die Ihre Klasse in ihrem Konstruktor benötigt. Unity verbindet diese Abhängigkeiten automatisch, wenn eine Instanz der Klasse erstellt wird.

Beispiel:

Betrachten Sie das Beispiel in der Frage:

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));
    }

    public TestSuite Parse(XPathNavigator someXml)
    {
        // Use the injected dependencies here
        foreach (XPathNavigator blah in aListOfNodes)
        {
            _testSuite.TestCase.Add(_testCase);
        }
    }
}

In Ihrem Kompositionsstamm würden Sie Unity dann wie folgt konfigurieren:

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

Unter Verwendung der Konstruktorinjektion Unity fügt automatisch die erforderlichen Abhängigkeiten in die TestSuiteParser-Klasse ein und sorgt so für eine ordnungsgemäße DI und einfache Tests.

Das obige ist der detaillierte Inhalt vonWie sollte ich für eine ordnungsgemäße Abhängigkeitsinjektion auf den Unity-Container in meiner Anwendung zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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