如何处理应用程序中的 Unity 容器访问
使用 Unity 这样的依赖注入框架时,考虑如何处理访问至关重要到应用程序中的容器。本问题探讨了三个选项,并根据依赖注入原则研究了最佳方法。
单例容器:
创建一个可以在应用程序中的任何位置访问的单例容器可能看起来很方便。然而,引入对容器的依赖来使用依赖注入框架与DI的原则相矛盾。
传递容器:
将Unity容器传递给子类可以变得笨重并且在视觉上没有吸引力。它还引入了紧密耦合,使得独立测试代码变得更加困难。
构造函数注入:
DI 的正确方法是使用构造函数注入。这涉及在类的构造函数中声明类所需的依赖项。 Unity 将在创建类的实例时自动连接这些依赖项。
示例:
考虑问题中提供的示例:
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); } } }
在您的组合根中,您可以按如下方式配置 Unity:
container.RegisterType<TestSuite, ConcreteTestSuite>(); container.RegisterType<TestCase, ConcreteTestCase>(); container.RegisterType<TestSuiteParser>();
使用构造函数注入,Unity会自动将必要的依赖注入到TestSuiteParser类中,确保正确的DI和易于测试。
以上是我应该如何访问应用程序中的 Unity 容器以进行正确的依赖项注入?的详细内容。更多信息请关注PHP中文网其他相关文章!