この記事を使用して、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 つの異なるスコーピング メカニズムは調和していないようです。