0

我正在创建一个应用程序,使用 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 的问题。

4

1 回答 1

0

好的,发现 RabbitMQ.Client.Core.DependencyInjection NuGet 有问题,改为使用 RabbitMQ.Client 并且一切正常

于 2022-01-25T14:24:46.907 回答