Unity 中的依赖注入:构造函数注入与单例或参数传递
使用 Unity 等依赖注入框架时,需要考虑一个关键因素关于如何解决应用程序更深层次内的依赖关系。
在所呈现的场景中, TestSuiteParser 类需要访问 TestSuite 和 TestCase 实例。为了解决这个问题,我们探索了几种方法:
单例 Unity 容器
创建一个单例来存储 Unity 容器可以从代码库中的任何位置访问该容器。然而,这种方法引入了对容器本身的依赖,这不太理想。
将 Unity 容器作为参数传递
将 Unity 容器作为参数传递给每个需要依赖关系的类可能会变得麻烦且视觉上令人不快。
构造函数注入
依赖注入的首选解决方案是构造函数注入。在此模式中,依赖项在类构造函数中声明为参数,如下面的 TestSuiteParser 类所示:
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)); } // ... }
通过使用构造函数注入,当类的实例被调用时,容器会自动解析依赖项。创建的。这种方法确保类在实例化时具有必要的依赖项。
在组合根中,Unity 容器可以配置如下:
container.RegisterType<TestSuite, ConcreteTestSuite>(); container.RegisterType<TestCase, ConcreteTestCase>(); container.RegisterType<TestSuiteParser>(); var parser = container.Resolve<TestSuiteParser>();
当容器解析 TestSuiteParser 实例时,它自动注入TestSuite和TestCase
结论
构造函数注入提供了一种干净有效的方法来统一解决依赖关系,消除了单例或参数传递方法的缺点。这种方法促进了应用程序中的松散耦合并提高了可测试性。
以上是Unity 中的构造函数注入与单例或参数传递:哪种依赖注入方法最好?的详细内容。更多信息请关注PHP中文网其他相关文章!