Как настроить репозиторий данных сообщений в качестве службы в MassTransit?

#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();

    ...
}