如何處理應用程式中的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中文網其他相關文章!