Configuración de aplicaciones C# (.NET): bibliotecas y enfoques

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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

Recommendations