AppSettings Repli / valeur par défaut?
-
04-10-2019 - |
Question
ASP.NET
Pour chaque utilisation appSetting I, je veux préciser une valeur qui sera renvoyée si la clé spécifiée ne se trouve pas dans les appSettings. J'étais sur le point de créer une classe pour gérer cela, mais je pense cette fonctionnalité est probablement déjà quelque part dans le .NET Framework?
Y at-il un NameValueCollection / Hash / etc classe de type .NET qui me permettra de spécifier une clé et une valeur de repli / default - et retour soit la valeur de la clé ou la valeur spécifiée
S'il y a, je pourrais mettre les appSettings dans un objet de ce type avant d'appeler en elle (à partir de divers endroits).
La solution
Je ne crois pas qu'il y ait quoi que ce soit intégré dans .NET qui fournit la fonctionnalité que vous cherchez.
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 y a 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 à plusieurs endroits.
Autres conseils
est ce que je fais.
WebConfigurationManager.AppSettings["MyValue"] ?? "SomeDefault")
Pour Boolean et d'autres types non-string ...
bool.Parse(WebConfigurationManager.AppSettings["MyBoolean"] ?? "false")
Je pense que le machine.config sous C: \% WIN% \ Microsoft.NET fera. Ajouter les clés à ce fichier que vos valeurs par défaut.
Vous pouvez construire une logique autour ConfigurationManager pour obtenir un moyen tapé pour récupérer votre valeur de réglage de l'application. En utilisant ici TypeDescriptor à la valeur de conversion.
/// /// Les méthodes d'utilitaire pour ConfigurationManager /// public static class ConfigurationManagerWrapper {
/// <summary>
/// Use this extension method to get a strongly typed app setting from the configuration file.
/// Returns app setting in configuration file if key found and tries to convert the value to a specified type. In case this fails, the fallback value
/// or if NOT specified - default value - of the app setting is returned
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="appsettingKey"></param>
/// <param name="fallback"></param>
/// <returns></returns>
public static T GetAppsetting<T>(string appsettingKey, T fallback = default(T))
{
string val = ConfigurationManager.AppSettings[appsettingKey] ?? "";
if (!string.IsNullOrEmpty(val))
{
try
{
Type typeDefault = typeof(T);
var converter = TypeDescriptor.GetConverter(typeof(T));
return converter.CanConvertFrom(typeof(string)) ? (T)converter.ConvertFrom(val) : fallback;
}
catch (Exception err)
{
Console.WriteLine(err); //Swallow exception
return fallback;
}
}
return fallback;
}
}
}