Strong-Typer
Generate C# Options classes from JSON configuration
💡 Tip
Select objects to generate. Use init for immutable properties.
JSON Input
Configure Sections
Database (DatabaseOptions)
ConnectionString
Timeout
MaxPoolSize
RetryPolicy (RetryPolicyOptions)
Count
Interval
Authentication (AuthenticationOptions)
Jwt (JwtOptions)
Issuer
Audience
SecretKey
ExpiryMinutes
AllowedOrigins
Logging (LoggingOptions)
LogLevel
EnableConsole
EnableFile
C# Code
using System.ComponentModel.DataAnnotations;
using Microsoft.Extensions.Options;
public class DatabaseOptions
{
public const string SectionName = "Database";
[Required]
public string ConnectionString { get; init; } = default!;
[Required]
public int Timeout { get; init; } = default!;
[Required]
public int MaxPoolSize { get; init; } = default!;
[Required]
public RetryPolicyOptions RetryPolicy { get; init; } = default!;
}
public class RetryPolicyOptions
{
public const string SectionName = "Database:RetryPolicy";
[Required]
public int Count { get; init; } = default!;
[Required]
public int Interval { get; init; } = default!;
}
public class AuthenticationOptions
{
public const string SectionName = "Authentication";
[Required]
public JwtOptions Jwt { get; init; } = default!;
[Required]
public List<string> AllowedOrigins { get; init; } = default!;
}
public class JwtOptions
{
public const string SectionName = "Authentication:Jwt";
[Required]
public string Issuer { get; init; } = default!;
[Required]
public string Audience { get; init; } = default!;
[Required]
public string SecretKey { get; init; } = default!;
[Required]
public int ExpiryMinutes { get; init; } = default!;
}
public class LoggingOptions
{
public const string SectionName = "Logging";
[Required]
public string LogLevel { get; init; } = default!;
[Required]
public bool EnableConsole { get; init; } = default!;
[Required]
public bool EnableFile { get; init; } = default!;
}
// Registration code:
builder.Services.AddOptions<DatabaseOptions>()
.Bind(builder.Configuration.GetSection(DatabaseOptions.SectionName))
.ValidateDataAnnotations()
.ValidateOnStart();
builder.Services.AddOptions<RetryPolicyOptions>()
.Bind(builder.Configuration.GetSection(RetryPolicyOptions.SectionName))
.ValidateDataAnnotations()
.ValidateOnStart();
builder.Services.AddOptions<AuthenticationOptions>()
.Bind(builder.Configuration.GetSection(AuthenticationOptions.SectionName))
.ValidateDataAnnotations()
.ValidateOnStart();
builder.Services.AddOptions<JwtOptions>()
.Bind(builder.Configuration.GetSection(JwtOptions.SectionName))
.ValidateDataAnnotations()
.ValidateOnStart();
builder.Services.AddOptions<LoggingOptions>()
.Bind(builder.Configuration.GetSection(LoggingOptions.SectionName))
.ValidateDataAnnotations()
.ValidateOnStart();
// Usage Example in a Service/Controller:
public class MyService
{
private readonly DatabaseOptions _options;
public MyService(IOptions<DatabaseOptions> options)
{
_options = options.Value;
}
public void DoSomething()
{
// Access properties via _options.ConnectionString
}
}