Patrick L
Patrick L

Reputation: 15

How to configure a MessageData repository as a service in MassTransit?

I would like to register an IMessageDataRepository as a separate service and use that service with the configuration of MassTransit. One way to accomplish this would be to resort to the dreaded service locator pattern:

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

    ...
}

Is there a better way?

Upvotes: 1

Views: 1016

Answers (1)

Chris Patterson
Chris Patterson

Reputation: 33268

When configuring the bus, via UsingRabbitMq, the context parameter is the service provider:

public void ConfigureServices(IServiceCollection services)
{
    ...

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

    services.AddMassTransitHostedService();

    ...
}

Upvotes: 1

Related Questions