2011-07-13 23 views
2

私はリポジトリをクラスに注入しています。リポジトリを注入したら、それぞれのリポジトリにコンテキストを割り当てているので、私の作業ユニットがあります。注射を傍受する

私が理解しようとしているのは、コードをセットアップするときに開発者がこれを考慮する必要がないように、私が注入したときに自分の作業単位を自動的に各リポジトリに割り当てる方法があるかどうかです。私は既に、開発者が継承している私の基本単位を私の基底クラスに設定しました。

私は次のようなことができますか?

Bind<I>().To<S>().WhenInjectedInto<IBaseClass>(i,b => { i.UnitOfWork = b.UnitOfWork }); 

ただし、毎回そのパターンを繰り返す必要はありませんか?

[UPDATE] 私はNinjectがからに注入し、何されている場合を把握するための方法で探しています、 https://github.com/ninject/ninject.extensions.interception

私は、これは遠く離れているかどうかを確認するためのテストに目を通すしようとしていますベース。どんな勧告?

+0

私はこれの他の部分をすべて開発しました。クラスにリポジトリを挿入するたびに、その作業単位を割り当ててから、メソッドを呼び出す必要があります。 IObjectiguaranteeHasUoWにIRepositoryの注入の暗黙的な部分を作りたいと思います。 – Hammerstein

答えて

1

コンストラクタインジェクションを使ってリポジトリにコンテキストを注入する方がよいと思います。 Webプロジェクトでは、InRequestScopeをコンテキストバインディングに使用できます。 WPF/WinForms/Consoleアプリケーションの場合、Ninject.Extensions.NamedScopeを見てください。 IBaseClassのすべての依存関係に対して単一のコンテキストが使用されるように定義することができます。

+0

私はこれを答えとしてマークしています。なぜなら、デザインを再考し、私がそれから何を得ているのかということです。私は与えられたリクエスト(MVC3)でリポジトリを使用しています。リポジトリが同じ作業単位を持っていることを確認しました。私の考えは、ハンドラクラスがこれを保持し、それをどのリポジトリにも渡すことでした。リポジトリ(基本クラス)を変更して、独自のUoWを取得することは、まったく同じで、すべてがInRequestScopeです。ありがとうございました。 – Hammerstein

関連する問題