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).

Était-ce utile?

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 strings 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")

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

Je pense que le machine.config sous C: \% WIN% \ Microsoft.NET fera. Ajouter les clés à ce fichier que vos valeurs par défaut.

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

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;
    }

}

}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top