Reputation: 15
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
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