我正在创建一个应用程序,使用 RabbitMQ.Client.Core.DependencyInjection 作为 BackgroundService 中的消息消费者。接收和反序列化消息正常工作,但是当我向 MediatR 发送命令时出现错误:
---> System.InvalidOperationException: Error while validating the service descriptor 'ServiceType: RabbitMQ.Client.Core.DependencyInjection.Services.IMessageHandlerContainerBuilder Lifetime: Singleton ImplementationType: RabbitMQ.Client.Core.DependencyInjection.Services.MessageHandlerContainerBuilder': Cannot consume scoped service 'Application.Common.Interfaces.IDbContext' from singleton 'RabbitMQ.Client.Core.DependencyInjection.Services.IMessageHandlerContainerBuilder'.
---> System.InvalidOperationException: Cannot consume scoped service 'Application.Common.Interfaces.IDbContext' from singleton 'RabbitMQ.Client.Core.DependencyInjection.Services.IMessageHandlerContainerBuilder'.
我的命令处理程序的构造函数在构造函数中创建 dbContext,在 BackgroundService 之外它可以正常工作。
我了解对于 BackgroundService,需要创建范围并从 ServiceProvider 获取服务:
using var scope = _sp.CreateScope();
var dbContext = scope.ServiceProvider.GetRequiredService<IDbContext>();
但是我如何使用应用程序的其余部分,我将注入的服务用作单例?
我相信如果我以同样的方式调用构造注入的 dbContext 的服务类,也会发生同样的问题,这似乎不是 MediatR 的问题。