You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MassTransit消费者注入DI服务编译报CS0310错误如何解决?

错误根因

你当前调用的ep.Consumer<ConsultantFinishedEventConsumer>()是无参重载,该重载要求消费者类必须包含公共无参构造函数。你为消费者类添加了带注入参数的构造函数后,默认无参构造消失,因此触发编译错误。


解决方案

你只需要调整MassTransit的注册逻辑,启用DI集成即可,修改分为两步:

  1. 在AddMassTransit配置块中注册你的消费者类,对接.NET原生DI体系
  2. 配置接收端点的Consumer方法时传入IServiceProvider实例,让MassTransit从DI容器中构建消费者实例

修改后的完整配置代码如下:

public static IServiceCollection AddEventBus(this IServiceCollection services, IConfiguration configuration)
{
    services.AddMassTransit(x =>
    {
        // 新增:注册消费者到MassTransit DI体系
        x.AddConsumer<ConsultantFinishedEventConsumer>();
        
        x.AddBus(provider => Bus.Factory.CreateUsingRabbitMq(config =>
        {
            config.Host("RabbitURL", h =>
            {
                h.Username("Username");
                h.Password("Pass");
            });
            config.ReceiveEndpoint("ConsultantQueue", ep =>
            {
                ep.PrefetchCount = 16;
                // 调整:传入provider参数,从容器解析消费者实例
                ep.Consumer<ConsultantFinishedEventConsumer>(provider);
            });
        }));
        RegisterClients(x);
    });
    services.AddMassTransitHostedService();
    return services;
}

修改后MassTransit会自动通过DI容器构造消费者实例,你注入的ILogger或其他DI服务都会被正常初始化,无需再给消费者类添加无参构造函数。


内容的提问来源于stack exchange,提问作者穆罕默德 - Moh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 13:54:01