Одно решение может быть,
public enum Settings
{
None,
DateFormatString,
DefeaultUserPrefix,
SomeOtherValue
}
и затем иметь вспомогательный класс, например,
public static class ConfigurationHelper
{
public static Get<T>(Settings setting)
{
string output = ConfigurationManager.AppSettings[setting.ToString()];
if(string.isNullOrEmpty(output))
throw new ConfigurationErrorsException("Setting " + setting + " is not defined in Configuration file.");
return (T)output; //You can probably use Convert.* functions.
}
}
Ваш телефонный код будет выглядеть так:
ConfigurationHelper.Get<string>(Settings.DateFormatString);
Приведенный выше подход обеспечивает некоторый уровень строгой типизации, но вам все равно нужно убедиться, что имя настроек в файле конфигурации совпадает с именем перечисления.
Наилучшим выбором будет автоматическая генерация класса на основе файла конфигурации.
Если вам нужны строго типизированные свойства, вы можете написать
public static string DateFormatString
{
get { return ConfigurationHelper.Get<string>(Settings.DateFormatString); }
}
Кроме того, я бы советовал не читать конфигурационный файл в конструкторе (преждевременная оптимизация?). Если вы прочитали файл конфигурации в конструкторе, это означает, что вы не можете изменить файл конфигурации во время работы приложения.