using AspNetCore.Extensions.Attributes; using System.Core.Extensions; using System.Extensions; namespace AspNetCore.Extensions; public static class WebApplicationBuilderExtensions { public static WebApplicationBuilder ConfigureExtended(this WebApplicationBuilder builder) where TOptions : class, new() { builder.ThrowIfNull() .Services.Configure(builder.Configuration.GetSection(GetOptionsName())); return builder; } public static IConfigurationSection GetRequiredSection(this ConfigurationManager configurationManager) { configurationManager.ThrowIfNull(); return configurationManager.GetRequiredSection(GetOptionsName()); } private static string GetOptionsName() { var maybeAttribute = typeof(TOptions).GetCustomAttributes(false).OfType().FirstOrDefault(); if (maybeAttribute is not null && maybeAttribute.Name?.IsNullOrWhiteSpace() is false) { return maybeAttribute.Name; } return typeof(TOptions).Name; } }