Configuración de aplicaciones C# (.NET): Guía completa de la biblioteca Microsoft.Extensions.Configuration
Las aplicaciones modernas en C# y .NET requieren una gestión flexible de la configuración: cadenas de conexión a la base de datos, URL de servicios externos, parámetros de registro, etc. La biblioteca Microsoft.Extensions.Configuration proporciona un mecanismo potente y unificado para trabajar con la configuración. Admite múltiples fuentes de datos (JSON, XML, variables de entorno, argumentos de línea de comandos) y permite combinarlas en una sola jerarquía.
Características principales de la biblioteca
- Fusión multinivel — las configuraciones de diferentes fuentes se combinan en un solo objeto.
- Prioridad de fuentes — la última fuente agregada sobrescribe las anteriores.
- Vinculación a clases (Options pattern) — llenado automático de objetos POCO desde la configuración.
- Actualización dinámica — soporte para releer archivos sin reiniciar la aplicación.
- Seguridad — los datos sensibles se pueden mover a variables de entorno o Azure Key Vault.
Uso básico: lectura desde appsettings.json
Cree un archivo appsettings.json en la raíz del proyecto:
{ "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 } }}Cargue la configuración en el código:
using Microsoft.Extensions.Configuration;
var configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .Build();
// Lectura de valores simplesstring appName = configuration["AppSettings:AppName"];int maxRetries = int.Parse(configuration["AppSettings:MaxRetries"]);
// Lectura de secciones anidadasvar loggingSection = configuration.GetSection("Logging:LogLevel");string defaultLevel = loggingSection["Default"];
// Lectura de cadena de conexiónstring connString = configuration.GetConnectionString("DefaultConnection");
Console.WriteLine($"Aplicación: {appName}, Reintentos: {maxRetries}");Prioridad y fusión de fuentes
Puede combinar múltiples fuentes. Por ejemplo, primero cargar JSON, luego sobrescribir parámetros individuales a través de variables de entorno:
var config = new ConfigurationBuilder() .AddJsonFile("appsettings.json") .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) // para Development/Production .AddEnvironmentVariables() // las variables de entorno tienen mayor prioridad .AddCommandLine(args) // los argumentos de línea de comandos tienen la máxima prioridad .Build();Vinculación a clases fuertemente tipadas (Options Pattern)
Cree una clase para la sección de configuración:
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; }}Luego vincúlelo en Program.cs usando el contenedor DI:
// Registro de serviciosbuilder.Services.Configure<AppSettings>( builder.Configuration.GetSection("AppSettings"));
// Uso en una clase (por ejemplo, en un controlador)public class HomeController : Controller{ private readonly AppSettings _settings; public HomeController(IOpti También en la biblioteca
tsx para TypeScript: guía completa con ejemplos prácticos
Métricas de Prometheus en C# (.NET): integración y configuración