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;
}
}