rabbitmq MassTransit无法使用IRequestClient -相关性注入问题

jv4diomz  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(1)|浏览(210)

在Startup.ConfigureServices中,添加MassTransit配置

services.AddMassTransit(config =>
{
       config.SetKebabCaseEndpointNameFormatter();
       config.AddRequestClient<RegisterCarOwner>();
       config.AddBus(provider => Bus.Factory.CreateUsingRabbitMq();
});

services.AddMassTransitHostedService();

在处理程序中我使用这个客户端来发送消息

public class RegisterCarOwnerHandler : IRequestHandler<RegisterCarOwnerCommand, Unit>
{
    private readonly IRequestClient<RegisterCarOwner> _registerOwnerClient;
    public RegisterCarOwnerHandler(IRequestClient<RegisterCarOwner> registerOwnerClient)
    {
       _registerOwnerClient = registerOwnerClient
    }

    public async Task<Unit> Handle(RegisterCarOwnerCommand command, CancellationToken token)
    {
       ...
    }
}

System.AggregateException:'无法构造某些服务(验证服务描述符“ServiceType:当试图激活'xxxx.注册汽车所有者处理程序'时,
更新:

public class Startup
{
    public Startup(IConfiguration configuration) { Configuration = configuration; }
    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        ....        
        var rabbitMqConf = new RabbitMqConfiguration();
        this.Configuration.GetSection(RabbitMqConfiguration.SectionName).Bind(rabbitMqConf);

        services.AddMassTransit(x =>
        {
            x.AddRequestClient<RegisterCarOwner>();
            x.UsingRabbitMq((context, cfg) =>
            {
                cfg.SetKebabCaseEndpointNameFormatter();
                cfg.Host(new Uri(rabbitMqConf.ConnectionUrl), c => 
                {
                    c.Username(rabbitMqConf.Username);
                    c.Password(rabbitMqConf.Password);
                });
                cfg.ConfigureEndpoints(context);
            });
        });
    }
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        ....
        app.UseRouting();
        app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
    }
}
9lowa7mx

9lowa7mx1#

IRequestClient<T>是有作用域的,而您试图在没有作用域的情况下解析它。
另外,您的总线配置严重过时,请更改:
config.AddBus(provider => Bus.Factory.CreateUsingRabbitMq();
转换为支持的语法:
config.UsingRabbitMq((context, cfg) => {});

相关问题