43 lines
1.7 KiB
C#
43 lines
1.7 KiB
C#
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.Options;
|
|
|
|
namespace StellaOps.DependencyInjection.Validation;
|
|
|
|
public static partial class FailFastOptionsExtensions
|
|
{
|
|
/// <summary>
|
|
/// Adds options with data annotation validation and configures fail-fast startup validation.
|
|
/// </summary>
|
|
/// <typeparam name="TOptions">The options type to configure. Must have DataAnnotations attributes.</typeparam>
|
|
/// <param name="services">The service collection.</param>
|
|
/// <param name="sectionName">The configuration section name.</param>
|
|
/// <returns>The service collection for chaining.</returns>
|
|
public static IServiceCollection AddOptionsWithDataAnnotations<TOptions>(
|
|
this IServiceCollection services,
|
|
string sectionName)
|
|
where TOptions : class
|
|
{
|
|
services.AddOptions<TOptions>()
|
|
.BindConfiguration(sectionName)
|
|
.ValidateDataAnnotations()
|
|
.ValidateOnStart();
|
|
|
|
return services;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Registers an existing options configuration to validate on start.
|
|
/// Use when options are already registered but need fail-fast validation added.
|
|
/// </summary>
|
|
/// <typeparam name="TOptions">The options type.</typeparam>
|
|
/// <param name="services">The service collection.</param>
|
|
/// <returns>The service collection for chaining.</returns>
|
|
public static IServiceCollection ValidateOptionsOnStart<TOptions>(this IServiceCollection services)
|
|
where TOptions : class
|
|
{
|
|
// Force options validation at startup by resolving IOptions<TOptions>
|
|
services.AddHostedService<OptionsValidationHostedService<TOptions>>();
|
|
return services;
|
|
}
|
|
}
|