dependency-injection – 通过依赖注入为后台任务提供DbContext

前端之家收集整理的这篇文章主要介绍了dependency-injection – 通过依赖注入为后台任务提供DbContext前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我可能没想到正确的方向.我是Dependency Injection和ASP.Net Core的新手.

我有一个ASP.Net核心网站,其中一个任务是将数据从Excel工作表导入用户上传数据库. excel表格可能很大,数据转换任务需要时间,因此我希望在后台执行它们.即用户上传工作表,响应将立即发送,后台作业/线程将导入数据.

我试图通过以下方式运行后台工作:

Task.Run(() => ProcessImport(model));

我遇到的问题是Process导入方法调用具有存储库类的服务,该存储库类通过作为Scoped添加的ASP.Net依赖注入容器访问AppDbContext,并且一旦响应被发回,则处理上下文.我得到一个运行时异常,你不能在它被处置后使用上下文.

我的问题是,处理这种情况的最佳方法是什么?我应该制作AppDbContext单例吗?我应该在ProcessImport方法中创建一个新的AppDbContext实例,并将其传递给它吗?我读过DbContext不是线程安全的,所以这是一个好方法吗?

您应该将IServiceScopeFactory实例(它的单例)传递给您的任务.

在内部任务中,当数据到达时,您应该创建新的CreateScope()并从该范围请求服务.当数据处理完成时 – 处置此范围(但是对下一次运行保持对IServiceScopeFactory的引用).

例如,请参见this.我用这个库运行小而快的任务.

对于重型/长期运行的任务,正如Gert所写,不要依赖于您的任务将始终运行完成.准备好重新启动,准备好重新处理相同的数据.

原文链接:https://www.f2er.com/javaschema/282048.html

猜你在找的设计模式相关文章