我有一个使用Ninject、Entity Framework和Unit of Work模式的MVC3项目,其中还包含一个Service层。
我的AsyncService类有一个函数,可以启动一个后台任务,例如将用户添加到User repository中。 我目前的问题是,该任务只能在几秒钟内正确运行,然后就会出现一个错误,指出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...
}
}