2010-09-21 6 views
3

ASP.NETAppSettings fallback/valeur par défaut?

Pour chaque appSetting que j'utilise, je souhaite spécifier une valeur qui sera renvoyée si la clé spécifiée est introuvable dans appSettings. J'étais sur le point de créer une classe pour gérer cela, mais je pense que cette fonctionnalité est probablement déjà dans le .NET Framework quelque part?

Existe-t-il une classe NameValueCollection/Hash/etc dans .NET qui me permet de spécifier une clé et une valeur fallback/default - et retourne la valeur de la clé, ou la valeur spécifiée? Si c'est le cas, je pourrais mettre l'appSettings dans un objet de ce type avant de l'appeler (à partir de divers endroits).

Répondre

2

Je ne crois pas qu'il y ait quelque chose construit dans .NET qui fournit la fonctionnalité que vous recherchez.

Vous pouvez créer une classe basée sur Dictionary<TKey, TValue> qui fournit une surcharge de TryGetValue avec un argument supplémentaire pour une valeur par défaut, par exemple .:

public class MyAppSettings<TKey, TValue> : Dictionary<TKey, TValue> 
{ 
    public void TryGetValue(TKey key, out TValue value, TValue defaultValue) 
    { 
     if (!this.TryGetValue(key, out value)) 
     { 
      value = defaultValue; 
     } 
    } 
} 

Vous pourriez probablement avec string s au lieu de rester en générique.

Il ya aussi DependencyObject du monde Silverlight et WPF si ce sont des options.

Bien sûr, la façon la plus simple est quelque chose comme ça avec un NameValueCollection:

string value = string.IsNullOrEmpty(appSettings[key]) 
    ? defaultValue 
    : appSettings[key]; 

key peut être null sur la chaîne indexeur. Mais je comprends que c'est une douleur de le faire dans plusieurs endroits.

+1

J'ai fourni une méthode d'extension pour ce faire qui inclut TypeConverstion: http://stackoverflow.com/a/34053423/375727. Evidemment pas pour l'OP, car ce post a 5 ans, mais les futurs googleurs comme moi qui n'ont pas trouvé la réponse ici. – Rhyous

0

Je pense que le fichier machine.config sous C: \% WIN% \ Microsoft.NET le fera. Ajoutez des clés à ce fichier en tant que valeurs par défaut.

http://msdn.microsoft.com/en-us/library/ms228154.aspx

+0

Machine.config me donnerait une valeur de repli, mais je ne serais pas en mesure de préciser dans le code? Est-ce correct? Je cherche quelque chose qui me permet de spécifier, dans le code, la valeur qui devrait être retournée si appSettings n'a pas la clé que je spécifie. Je mentionne appSettings, mais cette question concerne autant les NameValueCollection/Hash que les appSettings (ou * .config) en particulier. – lance

1

Vous pouvez faire une section de configuration personnalisée et fournir des valeurs par défaut en utilisant l'attribut DefaultValue. Les instructions pour cela sont disponibles here.

+0

Une autre bonne réponse qui montre à quel point j'ai mal posé ma question. Il se peut que je doive spécifier des valeurs de repli/défaut différentes en fonction de l'appelant (et/ou des valeurs qui ne sont déterminées qu'à l'exécution). Je n'aurais pas dû mentionner appSettings, car j'ai vraiment besoin, simplement, d'un objet de type NameValueCollection qui me permet de spécifier la valeur à retourner si la clé n'est pas trouvée. – lance

2

C'est ce que je fais.

WebConfigurationManager.AppSettings["MyValue"] ?? "SomeDefault") 

Pour Boolean et d'autres types non-cordes ...

bool.Parse(WebConfigurationManager.AppSettings["MyBoolean"] ?? "false")