加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-15 23:57:48 所属栏目:asp.Net 来源:网络整理
导读:我有一个MVC3项目,它使用Ninject,实体框架和工作单元模式与服务层. 我的AsyncService类有一个函数可以启动后台任务,例如,将用户添加到用户存储库. 我当前的问题是,在我收到DbContext已被丢弃的错误之前,任务只能正确运行几秒钟. 我注入了Ninject的InRequestS
我有一个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...
    }
}

解决方法

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读