1

メインアプリケーションから開始されたスレッドがある場合。このスレッドでイベントが生成されます。イベントが生成されるたびに、オブジェクトが作成されます。そのオブジェクトでは依存関係が必要なので、私はそのオブジェクトを注入したい。この依存関係を作成されたオブジェクトにどのように渡すことができますか?私は捨て去りを下に渡す必要がありますか(スレッド内で動作するクラスに依存性を知らせる)、またはこれを行うにはより良い方法がありますか?私はUnity btwを使用しています。オブジェクトを作成するスレッドの依存性注入

答えて

3

最も安全な方法は、最初に各スレッドに新しいオブジェクトグラフを作成させることです。他のスレッドによる依存関係を渡さないでください。

依存性注入では、オブジェクトの存続期間に関する知識を集中化しようとします。この集中管理された場所はComposition Rootと呼ばれます。あるスレッドから別のスレッドへの依存関係を開始するとき、コードのそれらの部分は、それらの依存関係を渡すことが安全かどうかを知る必要があります。例えば、それらの依存関係はスレッドセーフですか?これは多くの状況で分析するのは簡単かもしれませんが、他の実装との依存関係を変更することはできません。なぜなら、コード内にこれが起こっている場所があり、どの依存関係が引き継がれるのかを知る必要があるからです。この知識をもう一度分散させることで、DI構成の正しさを判断するのが難しくなり、競合状態を引き起こすような方法でコンテナを誤って構成しやすくなります。

この件に関する詳細はこのwikiページで確認できます:How to work with dependency injection in multi-threaded applications