これがシナリオです。このサービスが呼び出されると、別のクラスのインスタンス (Ninject を介して作成) に制御が渡されます。そのクラスでは、特に Entity Framework とリポジトリを使用して、いくつかの作業を行う必要があります。簡単に言うと、次のバインディングを宣言しています。
Bind<IGenericProductRepository>()
.To<GenericProductRepository>()
.WithConstructorArgument( "context", new StagingDataContext());
このリポジトリを使用したいときは、次のものがあります。
using (var genericProductRepository = IoC.Resolve<IGenericProductRepository>())
問題は、まったく新しいリクエストの場合に genericProductRepository の新しいインスタンスしか取得できないことです。メソッドが同じリクエストで複数回呼び出された場合、コンテキスト (EF コンテキスト) が既に破棄されていることを示すエラーが表示されます。これはusing ステートメントで既に破棄されているのと同じインスタンスを取得しているように見えるためです。別の言い方をすると、Microsoft WCF テスト クライアントを使用して、初めて呼び出した場合、コードは正常に実行されます。呼び出しボタンをもう一度押すと (テスト クライアントを再起動せずに、つまり同じ要求)、このエラーがスローされます。すでに処分されていることについて。
Ninject に付属するさまざまな「スコープ」をいじってみましたが、明らかに何かが欠けています。
私の基本的な質問は、同じものを使用する代わりに、その行にヒットするたびに新しいリポジトリを取得するにはどうすればよいですか? 助けていただければ幸いです。私は会社に Ninject を採用し、Spring を廃止するよう強く求めています。