如何解决如何在 Web API 的 BackgroundService 类中访问 EF db 上下文?
我有一个 Web API 端点,它在队列中插入项目(类 ReportQueue
)。
我有一个类对每个队列项进行一些数据库处理(类 ReportCollection
)。
我有一个 BackgroundService
子类,它从队列中取出一个项目并将其传递给类(类 WorkerService
)。
我可以在 Startup.ConfigureServices
中注册这些类,如下所示:
services.AddHostedService<WorkerService>().AddSingleton<IReportQueue<QueueItem>,ReportQueue<QueueItem>>();
services.AddScoped<IReportCollection,ReportCollection>();
但是我在 db 上下文中进退两难 - 如何将它传递给 ReportCollection
类?
-
ReportCollection
作为 POCO,没有资格获得 DI。 - 我无法将其注入
WorkerService
,因为我遇到了异常:
InvalidOperationException: Cannot consume scoped service 'DbContext'
from singleton Microsoft.Extensions.Hosting.IHostedService'.
using (var scope = scopeFactory.CreateScope())
{
var rc = scope.ServiceProvider.GetrequiredService<IReportCollection>();
//var dbc = scope.ServiceProvider.GetrequiredService<DbContext>();
rc.GetReport();
}
还有什么我可以尝试的吗?顺便说一句,我正在使用 .Net Core 3.1。
解决方法
如何在 WorkerService 中创建该集合类?
喜欢,var collection = ReportCollection>()
。
您可以将其放入构造函数并创建实例,而不是使用 DI。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。