C# (.NET) Application Configuration: Libraries and Approaches

Online Python Trainer for Beginners

Learn Python easily without overwhelming theory. Solve practical tasks with automatic checking, get hints in Russian, and write code directly in your browser — no installation required.

Start Course

C# (.NET) Application Configuration: Complete Guide to the Microsoft.Extensions.Configuration Library



Modern C# and .NET applications require flexible settings management: database connection strings, external service URLs, logging parameters, etc. The Microsoft.Extensions.Configuration library provides a powerful and unified mechanism for working with configuration. It supports multiple data sources (JSON, XML, environment variables, command-line arguments) and allows combining them into a single hierarchy.



Key Features of the Library

  • Multi-level merging — settings from different sources are combined into a single object.
  • Source priority — the last added source overrides previous ones.
  • Binding to classes (Options pattern) — automatic population of POCO objects from configuration.
  • Dynamic updates — support for re-reading files without restarting the application.
  • Security — sensitive data can be moved to environment variables or Azure Key Vault.


Basic Usage: Reading from appsettings.json

Create an appsettings.json file in the project root:

{  "Logging": {    "LogLevel": {      "Default": "Information",      "Microsoft": "Warning"    }  },  "ConnectionStrings": {    "DefaultConnection": "Server=localhost;Database=mydb;User Id=sa;Password=***;"  },  "AppSettings": {    "AppName": "MyApp",    "MaxRetries": 3,    "FeatureFlags": {      "EnableNewUI": true,      "EnableAnalytics": false    }  }}


Load the configuration in code:

using Microsoft.Extensions.Configuration;

var configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .Build();

// Reading simple valuesstring appName = configuration["AppSettings:AppName"];int maxRetries = int.Parse(configuration["AppSettings:MaxRetries"]);

// Reading nested sectionsvar loggingSection = configuration.GetSection("Logging:LogLevel");string defaultLevel = loggingSection["Default"];

// Reading a connection stringstring connString = configuration.GetConnectionString("DefaultConnection");

Console.WriteLine($"Application: {appName}, Retries: {maxRetries}");


Source Priority and Merging

You can combine multiple sources. For example, first load JSON, then override individual parameters via environment variables:

var config = new ConfigurationBuilder()    .AddJsonFile("appsettings.json")    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) // for Development/Production    .AddEnvironmentVariables() // environment variables have higher priority    .AddCommandLine(args)      // command-line arguments have the highest priority    .Build();


Binding to Strongly Typed Classes (Options Pattern)

Create a class for the configuration section:

public class AppSettings{    public string AppName { get; set; }    public int MaxRetries { get; set; }    public FeatureFlags FeatureFlags { get; set; }}

public class FeatureFlags{ public bool EnableNewUI { get; set; } public bool EnableAnalytics { get; set; }}


Then bind it in Program.cs using the DI container:

// Registering servicesbuilder.Services.Configure<AppSettings>(    builder.Configuration.GetSection("AppSettings"));

// Usage in a class (e.g., in a controller)public class HomeController : Controller{ private readonly AppSettings _settings; public HomeController(IOpti

Recommendations