У меня есть проект MVC3, в котором используются Ninject, Entity Framework и шаблон Unit of Work со слоем службы.
В моем классе AsyncService есть функция, запускающая фоновую задачу, которая, например, добавляет пользователей в репозиторий пользователей. Моя текущая проблема заключается в том, что задача выполняется правильно только в течение нескольких секунд, прежде чем я получаю сообщение об ошибке, что DbContext был удален. Мой контекст базы данных, который вводится с помощью InRequestScope() Ninject, похоже, утилизируется, поскольку 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...
}
}