私のプロジェクトは、サービスとリポジトリで構成されています (すべてのリポジトリが db コンテキストを共有しています)。サービス層の 1 つに、リポジトリを使用してデータベースに書き込む非同期メソッドがあります。このメソッドがコンテキストを使用できるようになる前に、Web リクエストは終了し、コンテキストを破棄します。この回答に記載されているように、 NamedScopesを理解しようとしました。私はまだそれを実装する方法を理解できないようです。私のプロジェクトがどのように構成されているかを示し、誰かがコード レベルで私を助けてくれることを願っています。
バインディング
private static void RegisterServices(IKernel kernel)
{
//dbcontext
kernel.Bind<EntityDatabaseContext>().ToMethod(context => new EntityDatabaseContext()).InRequestScope();
//unit of work
kernel.Bind<IUnitOfWork>().To<UnitOfWork>().InRequestScope();
//repositories
kernel.Bind<IRepository<Account>>().To<Repository<Account>>().InRequestScope();
//services
kernel.Bind<IAuthenticationService>().To<AuthenticationService>().InRequestScope();
}
AuthenticationService はコンストラクター注入を使用します
public AuthenticationService(UnitOfWork unitOfWork, IRepository<Account> accountRepository){}
AuthenticationService 内のメソッド
//this is a background process
public Task SomeMethodAsync(string text)
{
//spin it off into a new task
return Task.Factory.StartNew(() => SomeMethod(text));
}
SomeMethod
を利用しaccountRepository
ます。さらに情報が必要な場合は教えてください。NamedScopesが解決策である場合、スレッドの問題を解決してください。私の場合、どのように実装すればよいですか?
基本的にバックグラウンド処理が実行されており、リクエストスコープによりninjectによって破棄されているコンテキストを使用しています。