在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();
});
}
}
1条答案
按热度按时间9lowa7mx1#
IRequestClient<T>
是有作用域的,而您试图在没有作用域的情况下解析它。另外,您的总线配置严重过时,请更改:
config.AddBus(provider => Bus.Factory.CreateUsingRabbitMq();
个转换为支持的语法:
config.UsingRabbitMq((context, cfg) => {});