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); } } }
Dans la racine de votre composition, vous configurerez ensuite Unity comme suit :
container.RegisterType<TestSuite, ConcreteTestSuite>(); container.RegisterType<TestCase, ConcreteTestCase>(); container.RegisterType<TestSuiteParser>();
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!