AppSettings: Typed Configuration in .NET Core using the Options Pattern
Create a strongly typed configuration class for appsettings.json using required and init properties:
public class AppSettings
{
public required ConnectionStringsConfig ConnectionStrings { get; init; }
public required LoggingConfig Logging { get; init; }
public class ConnectionStringsConfig
{
public required string DefaultConnection { get; init; }
}
public class LoggingConfig
{
public required string LogLevel { get; init; }
}
}
Match your appsettings.json structure:
{
"ConnectionStrings": {
"DefaultConnection": "Server=myserver;Database=mydb;"
},
"Logging": {
"LogLevel": "Information"
}
}
Register in Program.cs:
builder.Services.Configure<AppSettings>(builder.Configuration);
builder.Services.AddSingleton(x => x.GetRequiredService<IOptions<AppSettings>>().Value);
Use in services:
public class MyService(AppSettings _appSettings)
{
public void DoWork()
{
var connectionString = _appSettings.ConnectionStrings.DefaultConnection;
// ...
}
}
Use in Blazor SSR Razor file:
@inject AppSettings appSettings
Benefits of This Approach #
This implementation provides several advantages over traditional string-based configuration access:
- Compile-time type checking prevents configuration key typos
- IntelliSense support improves developer productivity
- The required modifier ensures all necessary configuration values are provided
- Init-only properties prevent accidental configuration modifications