Skip to main content

Configuration Management

Short Introduction

Configuration management in .NET Core provides a flexible system for managing application settings from various sources like files, environment variables, and cloud services.

Official Definition

The .NET configuration system provides a key-value based configuration API that works with a variety of configuration providers to supply configuration data to applications.

Usage

// appsettings.json
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MyApp;Trusted_Connection=true"
},
"EmailSettings": {
"SmtpServer": "smtp.gmail.com",
"Port": 587,
"Username": "user@example.com",
"Password": "password"
}
}

// Configuration classes
public class EmailSettings
{
public string SmtpServer { get; set; } = string.Empty;
public int Port { get; set; }
public string Username { get; set; } = string.Empty;
public string Password { get; set; } = string.Empty;
}

// Program.cs
builder.Services.Configure<EmailSettings>(
builder.Configuration.GetSection("EmailSettings"));

Configuration Providers

  • JSON files (appsettings.json)
  • Environment variables
  • Command line arguments
  • Azure Key Vault
  • User secrets (development)

Use Cases

  • Application settings
  • Connection strings
  • Feature flags
  • Environment-specific configuration
  • Secrets management

Sample Usage

// Using IOptions pattern
public class EmailService : IEmailService
{
private readonly EmailSettings _emailSettings;
private readonly ILogger<EmailService> _logger;

public EmailService(IOptions<EmailSettings> emailSettings, ILogger<EmailService> logger)
{
_emailSettings = emailSettings.Value;
_logger = logger;
}

public async Task SendEmailAsync(string to, string subject, string body)
{
using var client = new SmtpClient(_emailSettings.SmtpServer, _emailSettings.Port);
// Configure and send email
}
}

// Direct configuration access
public class DatabaseService
{
private readonly IConfiguration _configuration;

public DatabaseService(IConfiguration configuration)
{
_configuration = configuration;
}

public string GetConnectionString()
{
return _configuration.GetConnectionString("DefaultConnection")
?? throw new InvalidOperationException("Connection string not found");
}
}