2012-01-30 9 views
1

ここは例です。Ninject(または任意のコンテナ)の工場/コンポジションルートに動的パラメータを渡します

foreach (var doc in documents) 
{ 
    var processor = this.factory.Create(); 
    processor.Process(doc); 
} 

factoryは、内部kernel.Get<IDocumentProcessor>()を呼び出します。

私はすべてのドキュメントプロセッサの依存関係の有効期間をこのコンポジションルートに「スコープ」したいと思います。この構成では、私がやりたいようだ:

kernel.Bind<IEntityContext>().To<EntityContext>().InCallScope(); 

今すぐドキュメントプロセッサをルートと各オブジェクトグラフは、データベースにアクセスするためのユニークな、共有エンティティのコンテキストを持っています。しかし、この

  1. は、アプリケーション内のどこでも、すべてのエンティティのコンテキストに影響を与えます(OKかもしれませんが、発見するのは難しいと思われる)、および
  2. は、静的について知らバインディングのために働くようです。

「コンテキスト」または動的情報で同じ有効範囲/有効期間の管理効果を達成するにはどうすればよいと思いますか?

var processor = this.factory.Create(doc) 
    processor.Process() 

ありがとう:おそらく、私は、それ自体が新しいルートのすべての子に注入した文書インスタンスを持つようにしたいです! Ninjectで

+0

申し訳ありませんが、私はあなたの問題が何か分かりませんでした。しかし、メソッド呼び出しに沿って文書を渡す最初の例は、通常の方法で行うべきです。 –

+0

こんにちはレモ、あなたが今Ninjectでやっているすべての仕事に感謝します!私が意味することは:第2のケースでは、ドキュメントプロセッサのすべての依存関係が正しい* IDocument *を受け取れるようにしたいと思います。それは理にかなっていますか? –

+0

あなたの投稿から私が知っていることから、docを依存関係として扱うのは間違っています。これはプロセッサの入力値によく似ているため、最初のオプションがより良く適合しているようです。しかし、問題全体を知らなくても答えを出すのは難しいです。 –

答えて

1

あなたは

kerne.Get<IProcessor>(new ConstructorArgument("doc", doc, true)); 

を行うことができます3.0.0しかし、私には、まだプロセッサの依存関係としてドキュメントを持っている設計上の欠陥があるように思われます。ドキュメントをProcessメソッドに渡すことで、プロセッサを一度作成して複数のドキュメントに再利用する方がよいでしょう。私はまだ質問が実際の問題を示していないという事実のために、これで何が問題になったのか分かりません。

+0

申し訳ありませんが、私は質問を改善することができますが表示されます。私は、ドキュメントの注入が間違って見えることに同意するが、私はドキュメントを処理するための注入 "コンテキスト"を作成しようとしている。質問の要点は、 "ドキュメント・プロセッサのすべての依存関係の存続期間をこのコンポジション・ルートに"スコープする "ことです。私はConstructorArgumentがその依存関係にではなく、プロセッサに注入されると仮定します。 Pete –

+0

ConstructorArgumentを継承することを指定することによって、子に継承されます。 –

+0

すごく、ありがとうRemo!私は3.0を待つつもりです。 –

関連する問題