Maison > développement back-end > C++ > Comment dois-je accéder au conteneur Unity dans mon application pour une injection de dépendances appropriée ?

Comment dois-je accéder au conteneur Unity dans mon application pour une injection de dépendances appropriée ?

DDD
Libérer: 2024-12-29 13:11:14
original
453 Les gens l'ont consulté

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

Comment gérer l'accès aux conteneurs Unity dans une application

Lorsque vous utilisez un framework d'injection de dépendances comme Unity, il est crucial de considérer la façon dont vous gérez l'accès au conteneur dans votre application. Cette question explore trois options et étudie la meilleure approche selon les principes d'injection de dépendances.

Conteneur Singleton :

La création d'un conteneur singleton auquel vous pouvez accéder n'importe où dans l'application peut semble pratique. Cependant, introduire une dépendance sur le conteneur pour utiliser un framework d'injection de dépendances contredit les principes de DI.

Passer le conteneur :

Passer le conteneur Unity aux classes enfants peut deviennent encombrants et visuellement peu attrayants. Cela introduit également un couplage étroit et rend plus difficile le test de votre code de manière indépendante.

Injection de constructeur :

La bonne approche de DI consiste à utiliser l'injection de constructeur. Cela implique de déclarer les dépendances dont votre classe a besoin dans son constructeur. Unity câblera automatiquement ces dépendances lors de la création d'une instance de la classe.

Exemple :

Considérez l'exemple fourni dans la question :

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);
        }
    }
}
Copier après la connexion

Dans la racine de votre composition, vous configurerez ensuite Unity comme suit :

container.RegisterType<TestSuite, ConcreteTestSuite>();
container.RegisterType<TestCase, ConcreteTestCase>();
container.RegisterType<TestSuiteParser>();
Copier après la connexion

En utilisant l'injection de constructeur, Unity injectera automatiquement les dépendances nécessaires dans la classe TestSuiteParser, garantissant une DI appropriée et une facilité de test.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal