Jas*_*nga 8 ninject unit-of-work task-parallel-library entity-framework-4 asp.net-mvc-3
我有一个MVC3项目,它使用Ninject,实体框架和工作单元模式与服务层.
我的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...
}
}
Run Code Online (Sandbox Code Playgroud)
InRequestScope'd对象Dispose在请求结束时是d,因此在这种情况下不能使用它.InThreadScope也不适合将UoW重用于多个任务.
您可以做的是AsyncService将NamedScope扩展名中的所有对象声明为您的作用域对象.
见http://www.planetgeek.ch/2010/12/08/how-to-use-the-additional-ninject-scopes-of-namedscope/
| 归档时间: |
|
| 查看次数: |
2190 次 |
| 最近记录: |