2009-08-12 8 views
0

Existe-t-il un moyen d'utiliser les propriétés définies par appSettings dans l'une des autres sections du fichier web.config?Utilisation des valeurs appSettings dans d'autres sections Web.config

Il est assez désagréable d'avoir à écrire une valeur (par exemple, une adresse e-mail) dans plus d'une section, et de la mettre à jour partout où elle se produit chaque fois qu'une modification est effectuée.

Répondre

2

Vous pouvez utiliser String.Format pour créer vos données et utiliser {0} dans le fichier de configuration, aux endroits appropriés.
En supposant que vous ayez des getters de base pour vos données, cela devrait être facile à implémenter.

Par exemple:

<add key="Mail" value="[email protected]"/> 
<add key="LinkFormat" value="[[Mail Us|mailto:{0}]]"/> 

Et puis (démonté de try/catch, la vérification des données):

public static string GetEmail() 
{ 
    return ConfigurationManager.AppSettings["Mail"]; 
} 

public static string GetEmailLinkformat() 
{ 
    string format = ConfigurationManager.AppSettings["LinkFormat"]; 
    string mail = GetEmail(); 
    return String.Format(format, mail); 
} 
+0

Pourriez-vous s'il vous plaît signaler un exemple? –

+0

Je travaillais déjà sur ça ... – Kobi

+0

Oh, merci Kobi, grand exemple! :-) En tout cas je pensais à toute solution qui ne nécessite aucun codage supplémentaire ... Mais s'il n'y a pas d'alternative, ça marchera, merci encore. –

-1

Si vous utilisez $ délimiteurs dans les AppSetting valeurs ceux-ci peuvent être remplacées par le les valeurs clés qu'ils représentent à partir des AppSettings

<add key="PrivacyPolicyURL" 
    value="$domain$/Default.aspx?siteid=$siteid$&amp;locid=$locid$&amp;tpid=$tpid$" 
    /> 

en utilisant la fonction suivante pour effectuer les substitutions;

public static string GetAppSetting(string key) 
{ 
    string keyValue = ConfigurationManager.AppSettings[key].ToString(); 

    foreach (System.Text.RegularExpressions.Match match in System.Text.RegularExpressions.Regex.Matches(keyValue, @"\$[\d\D]*?\$")) 
    { 
     try 
     { 
      string replaceWith = ConfigurationManager.AppSettings[match.Value.Replace("$", string.Empty)] ?? string.Empty; 
      keyValue = keyValue.Replace(match.Value, replaceWith); 
     } 
     catch 
     { 
      keyValue = keyValue.Replace(match.Value, string.Empty); 
     } 
    } 

    return keyValue; 
} 

Ainsi, dans l'exemple ce insère les AppSettings pour le domaine, siteid, Locid et TPID pour produire quelque chose comme; www.mywebsite.com/Default.aspx?siteid=1001&locid=1001&tpid=1001

+0

C'est une bonne option aussi, merci! Cependant, j'étais plus concentré sur, par exemple, utiliser une valeur déclarée dans la section appSettings dans une section différente, comme une section log4net. Quoi qu'il en soit, je suppose que toute option impliquera un certain codage, n'est-ce pas? –

Questions connexes