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