首頁 >後端開發 >C++ >Unity 中的建構函式註入與單例或參數傳遞:哪一種依賴注入方法最好?

Unity 中的建構函式註入與單例或參數傳遞:哪一種依賴注入方法最好?

Barbara Streisand
Barbara Streisand原創
2024-12-27 22:13:10630瀏覽

Constructor Injection vs. Singleton or Argument Passing in Unity: Which Dependency Injection Approach is Best?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn