Skip to main content

Quick start

1. Choose a package

# Schema generation and optional Options binding
dotnet add package Valiant.Settings

# Or install a specific integration
dotnet add package Valiant.Settings.AspNetCore
dotnet add package Valiant.Settings.Validation

Specific integration packages forward the core runtime, build, and generator assets they depend on. Add multiple integration packages only when the application uses multiple integrations.

2. Mark a settings model

using Valiant.Settings;

[ValiantSettings("Mail", configure: true)]
public sealed record MailSettings
{
public required string Host { get; init; }
public int Port { get; init; } = 587;

[ValiantSecret]
public string? Password { get; init; }
}

The section path is required. configure: true opts this model into generated Options binding; omit it for schema-only metadata.

3. Register generated settings

using Valiant.Settings.DependencyInjection;

builder.Services.AddValiantSettings(builder.Configuration);

The generated extension binds opted-in models and registers every generated schema provider.

4. Consume the options

public sealed class MailSender(IOptions<MailSettings> options)
{
private readonly MailSettings _settings = options.Value;
}

Or enumerate schemas:

IEnumerable<IValiantSettingsSchemaProvider> schemas =
provider.GetServices<IValiantSettingsSchemaProvider>();

Next: learn how nested models and collections appear in Schema generation.