Eu tenho usado um padrão que encontrei há algum tempo, em que você usa tags xml básicas, mas quebra as configurações em uma classe de configuração estática. Então - um App.Settings DIY.
Padrão de configuração estática do DotNetPearls
Se você fizer dessa maneira, poderá:
- use conjuntos diferentes de valores de configuração para diferentes ambientes (dev, test, prod)
- fornecer padrões sensíveis para cada configuração
- controlar como os valores são definidos e instanciados
É tedioso de configurar, mas tem um bom desempenho, oculta referências a nomes de chaves e é fortemente digitado. Esse tipo de padrão funciona bem para configurações que não são alteradas pelo aplicativo, embora você provavelmente também possa trabalhar no suporte a alterações.
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" />
Classe de configuração:
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
}