using MassTransit; using Mccn.Common.Application.EventBus; using Mccn.Common.Infrastructure.Authentication; using Mccn.Common.Infrastructure.Caching; using Mccn.Common.Infrastructure.EventBus; using Mccn.Common.Infrastructure.ExceptionHandlers; using Mccn.Common.Infrastructure.Observability; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Quartz; namespace Mccn.Common.Infrastructure; public static class DependencyInjection { public static IServiceCollection AddInfrastructure( this IServiceCollection services, IConfiguration configuration, params Action[] moduleConsumers) { services.AddJwtAuthentication(configuration); services.AddAuthorization(); services.AddCaching(configuration); services.AddObservability("Mccn", configuration); services.AddExceptionHandler(); services.AddProblemDetails(); services.AddHttpContextAccessor(); services.AddMassTransit(configure => { foreach (Action configureConsumers in moduleConsumers) configureConsumers(configure); configure.SetKebabCaseEndpointNameFormatter(); configure.UsingRabbitMq((context, cfg) => { cfg.Host(configuration.GetConnectionString("MessageBroker")); cfg.ConfigureEndpoints(context); }); }); services.AddScoped(); services.AddQuartz(); services.AddQuartzHostedService(options => options.WaitForJobsToComplete = true); return services; } }