Чтение целых чисел из AppSettings снова и снова - PullRequest
11 голосов
/ 10 сентября 2010

Некоторые из них, которые я делаю довольно часто, это чтение целых чисел из AppSettings. Какой лучший способ сделать это?

Вместо того, чтобы делать это каждый раз:

int page_size; 
if (int.TryParse( ConfigurationManager.AppSettings["PAGE_SIZE"], out page_size){

}

Я думаю о методе в моем Helpers классе, например:

int GetSettingInt(string key) { 
  int i;
  return int.TryParse(ConfigurationManager.AppSettings[key], out i) ? i : -1;
}

но это просто для сохранения некоторых нажатий клавиш.

В идеале, я бы хотел поместить их все в какую-то структуру, с которой я мог бы использовать intellisense, чтобы я не заканчивал ошибками во время выполнения, но я не знаю, как мне к этому подойти. .. или если это даже возможно.

Каков наилучший метод получения и чтения целых чисел из раздела AppSettings Web.Config?

ОДНА БОЛЬШЕ ...

не было бы хорошей идеей установить это значение как readonly?

readonly int pageSize = Helpers.GetSettingInt("PAGE_SIZE") не похоже на работу.

Ответы [ 3 ]

18 голосов
/ 17 сентября 2010

Я нашел ответ на мою проблему. Сначала это требует дополнительной работы, но, в конце концов, это уменьшит количество ошибок.

Он найден в Блоге Скотта Аллена OdeToCode и вот моя реализация:

Создать статический класс с именем Config

public static class Config {

   public static int PageSize {
       get { return int.Parse(ConfigurationManager.AppSettings["PAGE_SIZE"]); }
   }
   public static int HighlightedProductId {
     get { 
      return int.Parse(ConfigurationManager.AppSettings["HIGHLIGHT_PID"]); 
     }
   }
}

Преимущество этого состоит из трех частей:

  • Intellisense
  • Одна точка останова (СУХОЙ)
  • Поскольку я пишу только строку конфигурации ОДИН РАЗ, я выполняю обычный int.Parse.

Если кто-то изменит ключ AppSetting, он сломается, но я справлюсь с этим, поскольку эти значения не изменены, а производительность лучше, чем TryParse, и его можно исправить в одном месте.

Решение очень простое ... Я не знаю, почему я не думал об этом раньше. Назовите значения так:

Config.PageSize

Config.HighlightedProductId

Ура!

0 голосов
/ 07 апреля 2017

Взгляните на T4Config .Я сгенерирую интерфейс и конкретную реализацию ваших настроек приложений и разделов цепочек соединений вашей веб-конфигурации / конфигурации приложения с использованием отложенной загрузки значений в соответствующие типы данных.Он использует простой шаблон T4 для автоматического создания вещей для вас.

0 голосов
/ 05 апреля 2016

Чтобы не создавать велосипедный класс, вы можете использовать;

System.Configuration.Abstractions method .AppSettings.AppSetting<int>("intKey");https://github.com/davidwhitney/System.Configuration.Abstractions
...