MassTransit消费者注入DI服务编译报CS0310错误如何解决?
错误根因
你当前调用的ep.Consumer<ConsultantFinishedEventConsumer>()是无参重载,该重载要求消费者类必须包含公共无参构造函数。你为消费者类添加了带注入参数的构造函数后,默认无参构造消失,因此触发编译错误。
解决方案
你只需要调整MassTransit的注册逻辑,启用DI集成即可,修改分为两步:
- 在AddMassTransit配置块中注册你的消费者类,对接.NET原生DI体系
- 配置接收端点的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
相关产品推荐
相关产品推荐

