ホームページ > バックエンド開発 > C++ > 依存関係の注入を適切に行うには、アプリケーション内の Unity コンテナにどのようにアクセスすればよいですか?

依存関係の注入を適切に行うには、アプリケーション内の Unity コンテナにどのようにアクセスすればよいですか?

DDD
リリース: 2024-12-29 13:11:14
オリジナル
452 人が閲覧しました

How Should I Access the Unity Container in My Application for Proper Dependency Injection?

アプリケーションで Unity コンテナー アクセスを処理する方法

Unity のような依存関係注入フレームワークを使用する場合、アクセスを処理する方法を検討することが重要ですアプリケーション内のコンテナーに追加します。この質問では、3 つのオプションを検討し、依存関係注入の原則に従って最適なアプローチを調査します。

シングルトン コンテナ:

アプリケーション内のどこからでもアクセスできるシングルトン コンテナを作成すると、便利そうです。ただし、依存関係注入フレームワークを使用するためにコンテナに依存関係を導入することは、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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート