using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; namespace Musify.Infrastructure.Configuration { public static class ConfigurationDependencyInjection { public static IServiceCollection AddInfrastructureConfigurations(this IServiceCollection serviceDescriptors, IConfiguration configuration) { serviceDescriptors .AddValidatedConfiguration(configuration, DatabaseConfiguration.SectionName) .AddValidatedConfiguration(configuration, KeycloakConfiguration.SectionName) .AddValidatedConfiguration(configuration, InfrastructureStorageConfiguration.SectionName) .AddValidatedConfiguration(configuration, MessagingConfiguration.SectionName) .AddValidatedConfiguration(configuration, OpenTelemetryConfiguration.SectionName); return serviceDescriptors; } static IServiceCollection AddValidatedConfiguration( this IServiceCollection serviceDescriptors, IConfiguration configuration, string sectionName) where TConfiguration : class { serviceDescriptors .AddOptionsWithValidateOnStart() .Bind(configuration.GetRequiredSection(sectionName)) .ValidateDataAnnotations(); serviceDescriptors.AddSingleton(serviceProvider => serviceProvider.GetRequiredService>().Value); return serviceDescriptors; } } }