5

この記事を使用して、ninject を Asp.Net WebApi で動作させる

http://www.strathweb.com/2012/05/using-ninject-with-the-latest-asp-net-web-api-source/

これにより、InSingletonScope などのすべてのスコープが壊れます

編集:答えはコメントにありました

わかりました、私はほとんどそれを理解しました。問題は、NinjectResolver の BeginScope メソッドが、コンストラクターに _kernel.BeginBlock() を渡す新しい NinjectScope を返すことです。これにより、バインディングで宣言されたスコープからインスタンスが新しいアクティベーション ブロックに再度関連付けられます。

そのため、以前はリクエストにスコープが設定されていたものが、現在はアクティベーション ブロックにスコープが設定されています。

これを回避するために、NinjectResolver を次のように変更しました。

public IDependencyScope BeginScope() { return new NinjectScope(_kernel); }

次に、NinjectScope がカーネル自体を破棄しないようにするために、NinjectScope の Dispose ブロック内のすべてをコメントアウトしました。

私が知る限り、これは大きな影響を与えるべきではありません。組み込みのキャッシュ アンド コレクト メカニズムは通常どおりに機能し、GC をポーリングし、キャッシュ内のインスタンスを自動的に破棄します。

ここでの問題の核心は、WebApi 自体がリクエストごとのスコープ管理の仕事をしようとしていることにあると思いますが、Ninject はすでにその仕事をする方法を持っています。2 つの異なるスコーピング メカニズムは調和していないようです。

4

0 に答える 0