Skip to main content

Binding and validation

Generated Options binding

Set configure: true and register settings once:

[ValiantSettings("Storage:S3", configure: true)]
public sealed record S3Settings
{
public required string Bucket { get; init; }
public string? Region { get; init; }
}

builder.Services.AddValiantSettings(builder.Configuration);

Valiant emits the equivalent section-aware services.Configure<S3Settings>(configuration.GetSection("Storage:S3")) registration.

Schema providers register by default. Disable them when the application only needs binding and validation:

builder.Services.AddValiantSettings(builder.Configuration, options =>
{
options.RegisterSchemaProviders = false;
});

Validate Options with Valiant

Reference Valiant.Settings.Validation and declare the matching validator:

[ValiantValidator]
public sealed partial class S3SettingsValidator
: ValidatorDefinition<S3Settings>
{
public override void Configure(ValidationContext<S3Settings> context)
{
context.Property(settings => settings.Bucket).Required();
context.Property(settings => settings.Region).MaxLength(32);
}
}

Register validators and enable the adapter:

builder.Services.AddValiantValidators();
builder.Services.AddValiantSettings(builder.Configuration, options =>
{
options.ValidateWithValiant = true;
});

Generated settings registration adds IValidateOptions<S3Settings> for configured settings models. It resolves a matching IValidator<S3Settings> from DI and translates Valiant errors to normal Options validation failures.

Require matching validators

By default, validation succeeds when no validator is registered. Make missing validators a configuration error:

builder.Services.AddValiantSettings(builder.Configuration, options =>
{
options.ValidateWithValiant = true;
options.RequireValidators = true;
});

Only models with configure: true receive Options binding and validation adapters. Schema-only models remain metadata contracts.