C#
Beginner
1 min read
Configuration and appsettings.json
Example
// Configuration system: appsettings.json + environment variables + IOptions<T>
/*
appsettings.json:
{
"Logging": { "LogLevel": { "Default": "Information" } },
"Database": {
"ConnectionString": "Server=localhost;Database=MyApp;",
"CommandTimeoutSeconds": 30,
"MaxPoolSize": 100
},
"FeatureFlags": {
"EnableBetaFeatures": false,
"MaxUploadSizeMb": 10
}
}
*/
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
// Strongly-typed option classes
public class DatabaseOptions
{
public const string Section = "Database";
public string ConnectionString { get; set; } = "";
public int CommandTimeoutSeconds { get; set; } = 30;
public int MaxPoolSize { get; set; } = 50;
}
public class FeatureFlags
{
public const string Section = "FeatureFlags";
public bool EnableBetaFeatures { get; set; }
public int MaxUploadSizeMb { get; set; } = 10;
}
// Wire up in Program.cs
var builder = WebApplication.CreateBuilder(args);
builder.Services
.AddOptions<DatabaseOptions>()
.Bind(builder.Configuration.GetSection(DatabaseOptions.Section))
.ValidateDataAnnotations()
.ValidateOnStart();
builder.Services
.AddOptions<FeatureFlags>()
.Bind(builder.Configuration.GetSection(FeatureFlags.Section));
var app = builder.Build();
app.MapGet("/config", (IOptions<DatabaseOptions> db, IOptions<FeatureFlags> ff) =>
Results.Ok(new
{
db.Value.MaxPoolSize,
db.Value.CommandTimeoutSeconds,
ff.Value.EnableBetaFeatures,
ff.Value.MaxUploadSizeMb
}));
app.Run();