Ninject、Entity Framework、およびサービスレイヤーを備えた作業ユニットパターンを使用するMVC3プロジェクトがあります。
私のAsyncServiceクラスには、例として、ユーザーをユーザーリポジトリに追加するバックグラウンドタスクを開始する関数があります。私の現在の問題は、DbContextが破棄されたというエラーが発生する前に、タスクが数秒間しか正しく実行されないことです。NinjectのInRequestScope()で注入された私のデータベースコンテキストは、InRequestScope()がHttpContextに関連付けているため、破棄されているようです。
InThreadScope()について読みましたが、MVCプロジェクトで適切に実装する方法がわかりません。
私の質問は:私のタスクでNinjectを使用する正しい方法は何ですか?
public class AsyncService
{
private CancellationTokenSource cancellationTokenSource;
private IUnitOfWork _uow;
public AsyncService(IUnitOfWork uow)
{
_uow = uow;
}
public void AsyncStartActivity(Activity activity)
{
...snip...
this.cancellationTokenSource = new CancellationTokenSource();
var cancellationToken = this.cancellationTokenSource.Token;
var task = Task.Factory.StartNew(() =>
{
foreach (var user in activity.UserList)
{
this._uow.UserRepository.Add(new User() {UserID = user});
}
this._uow.Save();
}, cancellationToken);
...snip...
}
}