如何将 MessageData 存储库配置为 MassTransit 中的服务?

How to configure a MessageData repository as a service in 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();

    ...
}

有没有更好的方法?

配置总线时,通过UsingRabbitMqcontext参数是服务提供者:

public void ConfigureServices(IServiceCollection services)
{
    ...

    services.AddMassTransit(x =>
    {
        x.UsingRabbitMq((context, cfg) =>
        {         
            cfg.UseMessageData(context.GetRequiredService<IMessageDataRepository>());
        });
    });

    services.AddMassTransitHostedService();

    ...
}