6

TPL がこれを実行可能にするのに十分なのかどうかはわかりません。そのため、代わりに機能する代替パターンを自由に指摘してください。:)

理想的には特定のルート/親 Task インスタンスにスコープを設定する必要がある、ctor によって注入された依存関係に Ninject を使用できるかどうかを把握しようとしています。

これは asp.net リクエスト スコープに多少似ていますが、このシナリオでは、並行して実行される N 個の異なるタスクを作成するコンソール アプリです。各タスクの一部として作成されたオブジェクト グラフが特定のインターフェイスの同じインスタンスを共有するように、これらのルート タスク インスタンスのそれぞれに基づいて Ninject にランタイム依存性注入を実行させる機能があるかどうか疑問に思っていますが、異なるタスクはすべて個別のインスタンスがあります。

ありがとう!

[編集]検索を続けると、「オブジェクトが依存関係のスコープであることを定義する」の説明に基づいて、InNamedScope正しい答えのように見えます

4

1 に答える 1

4

あなたの質問を正しく理解しているなら、それInNamedScopeは良い選択です。もう 1 つの選択肢はInCallScope. このブログ投稿には、違いについての良い議論があります。

名前付きスコープを使用すると、バインディングによって作成されたオブジェクトが、作成されたオブジェクトに注入されるオブジェクト ツリーの一部である他のオブジェクトのスコープであることをバインディングで定義できます。

例でこれがどのように機能するかを見てみましょう。複数のワークシートを持つ Excel のようなアプリケーションを作成していると想像してください。

const string ScopeName = "ExcelSheet";
Bind<ExcelSheet>().ToSelf().DefinesNamedScope(ScopeName);
Bind<SheetPresenter>().ToSelf();
Bind<SheetCalculator>().ToSelf();
Bind<SheetDataRepository>().ToSelf().InNamedScope(ScopeName);

ここで、はスコープ内の をSheetDataRepository使用します。ExcelSheetこの記事では、より詳細に説明しています。

于 2012-05-31T15:29:21.063 に答える