#asp.net #asp.net-core #masstransit
Вопрос:
Я хотел бы зарегистрировать IMessageDataRepository в качестве отдельной службы и использовать эту службу с конфигурацией MassTransit. Одним из способов достижения этой цели было бы прибегнуть к ужасному шаблону поиска служб:
public void ConfigureServices(IServiceCollection services)
{
...
using var serviceProvider = services.BuildServiceProvider();
var repository = serviceProvider.GetRequiredService<IMessageDataRepository>();
services.AddMassTransit(x =>
{
x.UsingRabbitMq((context, cfg) =>
{
cfg.UseMessageData(repository);
});
});
services.AddMassTransitHostedService();
...
}
Есть ли лучший способ?
Ответ №1:
При настройке шины via UsingRabbitMq
параметром контекста является поставщик услуг:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddMassTransit(x =>
{
x.UsingRabbitMq((context, cfg) =>
{
cfg.UseMessageData(context.GetRequiredService<IMessageDataRepository>());
});
});
services.AddMassTransitHostedService();
...
}