using Events.WebAPI.Util.Settings; using MassTransit; using Microsoft.Extensions.Options; namespace Events.WebAPI.Util.Startup; public static class MassTransitSetupExtensions { public static void SetupMassTransit(this IServiceCollection services, IConfiguration configuration) { services.AddOptions() .Bind(configuration.GetSection("RabbitMq")) .ValidateDataAnnotations() .Validate( settings => Uri.TryCreate(settings.Host, UriKind.Absolute, out var uri) && uri.Scheme == "rabbitmq" && !string.IsNullOrWhiteSpace(uri.Host), "RabbitMq:Host must be a valid absolute rabbitmq:// URI.") .ValidateOnStart(); services.AddMassTransit(x => { x.UsingRabbitMq((context, cfg) => { var settings = context.GetRequiredService>().Value; cfg.Host(new Uri(settings.Host), h => { h.Username(settings.Username); h.Password(settings.Password); }); }); }); } }