Резервный AppSettings / значение по умолчанию? - PullRequest
3 голосов
/ 21 сентября 2010

ASP.NET

Для каждого набора приложений, который я использую, я хочу указать значение, которое будет возвращено, если указанный ключ не найден в наборе приложений.Я собирался создать класс для управления этим, но я думаю, что эта функциональность, вероятно, уже где-то в .NET Framework?

Есть ли в .NET класс NameValueCollection / Hash / etc-type, который будетпозвольте мне указать ключ и запасное значение / значение по умолчанию - и вернуть либо значение ключа, либо указанное значение?

Если есть, я мог бы поместить appSettings в объект этого типа перед вызовом в него(из разных мест).

Ответы [ 5 ]

2 голосов
/ 31 августа 2017

Это то, что я делаю.

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

Для логических и других нестроковых типов ...

bool.Parse(WebConfigurationManager.AppSettings["MyBoolean"] ?? "false")
2 голосов
/ 21 сентября 2010

Я не верю, что в .NET есть что-то, что обеспечивает требуемую функциональность.

Вы можете создать класс на основе Dictionary<TKey, TValue>, который обеспечивает перегрузку TryGetValue с помощьюдополнительный аргумент для значения по умолчанию, например:

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

Вероятно, вы можете обойтись без string s вместо общего.

Там также DependencyObject мир Silverlight и WPF, если таковые имеются.

Конечно, самый простой способ - это что-то вроде этого с NameValueCollection:

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

key может быть null наиндексатор строкНо я понимаю, это больно делать это в разных местах.

1 голос
/ 21 сентября 2010

Вы можете создать пользовательский раздел конфигурации и предоставить значения по умолчанию, используя атрибут DefaultValue. Инструкции для этого доступны здесь .

0 голосов
/ 20 февраля 2019

Вы можете построить логику вокруг ConfigurationManager, чтобы получить типизированный способ получения значения параметров вашего приложения.Использование здесь TypeDescriptor для преобразования значения.

/// /// Служебные методы для ConfigurationManager /// открытый статический класс 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;
    }

}

}

0 голосов
/ 21 сентября 2010

Я думаю, что machine.config в C: \% WIN% \ Microsoft.NET сделает это.Добавьте ключи к этому файлу в качестве значений по умолчанию.

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

...