Back
Syntax
Study
Editor
Mode:
HTML
CSS
JavaScript
PHP
Reset
Run »
HTML / CSS / JS
// 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();
Result
Open