He estado usando un patrón que encontré hace un tiempo en el que usas etiquetas xml básicas pero envuelves la configuración en una clase de configuración estática. Entonces, una aplicación de bricolaje.
Patrón de configuración estática DotNetPearls
Si lo haces de esta manera puedes:
- usar diferentes conjuntos de valores de configuración para diferentes entornos (dev, test, prod)
- proporcionar valores predeterminados razonables para cada configuración
- controlar cómo se definen e instancian los valores
Es tedioso configurarlo, pero funciona bien, oculta referencias a nombres clave y está fuertemente tipado. Este tipo de patrón funciona bien para la configuración que no cambia la aplicación, aunque probablemente también podría trabajar en soporte para los cambios.
Config:
<add key="machineName" value="Prod" />
<add key="anotherMachineName" value="Test" />
<add key="EnvTypeDefault" value="Dev" />
<add key="RootURLProd" value="http://domain.com/app/" />
<add key="RootURLTest" value="http://test.domain.com/app/" />
<add key="RootURLDev" value="http://localhost/app/" />
<add key="HumanReadableEnvTypeProd" value="" />
<add key="HumanReadableEnvTypeTest" value="Test Mode" />
<add key="HumanReadableEnvTypeDev" value="Development Mode" />
Clase de configuración:
using System;
using System.Collections.Generic;
using System.Web;
using WebConfig = System.Web.Configuration.WebConfigurationManager;
public static class Config
{
#region Properties
public static string EnvironmentType { get; private set; }
public static Uri RootURL { get; private set; }
public static string HumanReadableEnvType { get; private set; }
#endregion
#region CTOR
/// <summary>
/// Initializes all settings when the app spins up
/// </summary>
static Config()
{
// Init all settings here to prevent repeated NameValueCollection lookups
// Can increase performance on high volume apps
EnvironmentType =
WebConfig.AppSettings[System.Environment.MachineName] ??
"Dev";
RootURL =
new Uri(WebConfig.AppSettings["RootURL" + EnvironmentType]);
HumanReadableEnvType =
WebConfig.AppSettings["HumanReadableEnvType" + Config.EnvironmentType] ??
string.Empty;
}
#endregion
}