ホームページ >バックエンド開発 >C++ >Unity でのコンストラクター インジェクションとシングルトンまたは引数の受け渡し: 依存性インジェクションのアプローチはどちらが最適ですか?

Unity でのコンストラクター インジェクションとシングルトンまたは引数の受け渡し: 依存性インジェクションのアプローチはどちらが最適ですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-27 22:13:10632ブラウズ

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

Unity での依存性注入: コンストラクターの注入とシングルトンまたは引数の受け渡し

Unity などの依存性注入フレームワークを利用する場合、重要な考慮事項が生じます。より深い層内の依存関係を解決する方法についてapplication.

このシナリオでは、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 で依存関係を解決するクリーンで効率的な方法を提供し、シングルトンまたは引数を渡すアプローチの欠点を排除します。このアプローチにより、アプリケーションの疎結合とテスト容易性が向上します。

以上がUnity でのコンストラクター インジェクションとシングルトンまたは引数の受け渡し: 依存性インジェクションのアプローチはどちらが最適ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。