WidgetProcessor というサービス (Web サービスではなくサービス層オブジェクト) があり、そのサービスに Process() という名前のメソッドが 1 つしかない場合、そのメソッド内で別のサービス (サービス層オブジェクト) を使用します。このサービスを WidgetValidator と呼びましょう。これには、Parallel.ForEach 内から呼び出されるメソッド Validate() があります。
1) Validate メソッドで何もしない場合、複数の計算を実行する場合、スレッドセーフではないと想定しています...正しいですか?
2) WidgetValidator オブジェクトを挿入する適切な方法は何ですか。コンストラクターを介して WidgetValidator を注入し、それをクラス レベルのプライベート変数に割り当てると、Parallel.ForEach 内で WidgetValidator を新しく作成する場合と比較して、スレッド セーフ性が低下するようです。しかし、これについての何かが私に「コードの匂い」を考えさせます! Validate メソッド内のコードにロックを適用するだけでよいでしょうか。
注: IoC コンテナーとして Ninject を使用しています。