asp.net-mvc-3 – 任务/线程的Ninject Scope问题

前端之家收集整理的这篇文章主要介绍了asp.net-mvc-3 – 任务/线程的Ninject Scope问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个MVC3项目,它使用Ninject,实体框架和工作单元模式与服务层.

我的AsyncService类有一个函数可以启动后台任务,例如,将用户添加用户存储库.
我当前的问题是,在我收到DbContext已被丢弃的错误之前,任务只能正确运行几秒钟.
我注入了Ninject的InRequestScope()的数据库上下文似乎正在处理,因为InRequestScope()将它与HttpContext联系起来.

我已经读过InThreadScope(),但是我不确定如何在我的MVC项目中正确实现它.

我的问题是:在我的任务中使用Ninject的正确方法是什么?

  1. public class AsyncService
  2. {
  3. private CancellationTokenSource cancellationTokenSource;
  4. private IUnitOfWork _uow;
  5. public AsyncService(IUnitOfWork uow)
  6. {
  7. _uow = uow;
  8. }
  9. public void AsyncStartActivity(Activity activity)
  10. {
  11. ...snip...
  12. this.cancellationTokenSource = new CancellationTokenSource();
  13. var cancellationToken = this.cancellationTokenSource.Token;
  14. var task = Task.Factory.StartNew(() =>
  15. {
  16. foreach (var user in activity.UserList)
  17. {
  18. this._uow.UserRepository.Add(new User() {UserID = user});
  19. }
  20. this._uow.Save();
  21. },cancellationToken);
  22. ...snip...
  23. }
  24. }

解决方法

InRequestScope’d对象在请求结束时处理,因此在这种情况下不能使用它. InThreadScope也不适合将UoW重用于多个任务.

您可以做的是将AsyncService声明为使用NamedScope扩展的所有对象的作用域对象.

http://www.planetgeek.ch/2010/12/08/how-to-use-the-additional-ninject-scopes-of-namedscope/

猜你在找的asp.Net相关文章