アプリケーションで 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 サイトの他の関連記事を参照してください。