using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; namespace Musify.Application.Configuration { public static class ConfigurationDependencyInjection { public static IServiceCollection AddApplicationConfigurations(this IServiceCollection serviceDescriptors, IConfiguration configuration) { serviceDescriptors .AddValidatedConfiguration(configuration, StorageConfiguration.SectionName) .AddValidatedConfiguration(configuration, PlayListConfiguration.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; } } }