mirror of
https://github.com/AlexMacocian/Net.Sdk.Web.Extensions.git
synced 2026-07-15 21:49:30 +00:00
35 lines
1.1 KiB
C#
35 lines
1.1 KiB
C#
using AspNetCore.Extensions.Attributes;
|
|
using System.Core.Extensions;
|
|
using System.Extensions;
|
|
|
|
namespace AspNetCore.Extensions;
|
|
|
|
public static class WebApplicationBuilderExtensions
|
|
{
|
|
public static WebApplicationBuilder ConfigureExtended<TOptions>(this WebApplicationBuilder builder)
|
|
where TOptions : class, new()
|
|
{
|
|
builder.ThrowIfNull()
|
|
.Services.Configure<TOptions>(builder.Configuration.GetSection(GetOptionsName<TOptions>()));
|
|
return builder;
|
|
}
|
|
|
|
public static IConfigurationSection GetRequiredSection<TOptions>(this ConfigurationManager configurationManager)
|
|
{
|
|
configurationManager.ThrowIfNull();
|
|
return configurationManager.GetRequiredSection(GetOptionsName<TOptions>());
|
|
}
|
|
|
|
private static string GetOptionsName<TOptions>()
|
|
{
|
|
var maybeAttribute = typeof(TOptions).GetCustomAttributes(false).OfType<OptionsNameAttribute>().FirstOrDefault();
|
|
if (maybeAttribute is not null &&
|
|
maybeAttribute.Name?.IsNullOrWhiteSpace() is false)
|
|
{
|
|
return maybeAttribute.Name;
|
|
}
|
|
|
|
return typeof(TOptions).Name;
|
|
}
|
|
}
|