一遍又一遍地从AppSettings中读取整数

Arm*_*est 13 web-config appsettings

我做的很多是从AppSettings读取整数.最好的方法是什么?

而不是每次都这样做:

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

}
Run Code Online (Sandbox Code Playgroud)

我在想我Helpers班上的一个方法是这样的:

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

但这只是为了节省一些按键.

理想情况下,我喜欢将它们全部放入某种我可以使用intellisense的结构中,因此我不会遇到运行时错误,但我不知道我是如何处理这个...或者如果这是可能的话.

从Web.Config的AppSettings部分获取和读取整数的最佳实践方法是什么?

还有一件事...

设置它不是一个好主意readonly吗?

readonly int pageSize = Helpers.GetSettingInt("PAGE_SIZE") 似乎不起作用.

Arm*_*est 20

我找到了问题的答案.它首先涉及额外的工作,但最终会减少错误.

它出现在Scott Allen的博客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"]); 
     }
   }
}
Run Code Online (Sandbox Code Playgroud)

这样做的好处有三方面:

  • 智能感知
  • 一个断点(DRY)
  • 因为我只编写了Config String ONCE,所以我做一个常规的int.Parse.

如果有人更改AppSetting Key,它会中断,但我可以处理,因为这些值没有改变,性能优于a TryParse,可以在一个位置修复.

解决方案很简单......我不知道为什么我之前没有想到它.像这样调用值:

Config.PageSize

Config.HighlightedProductId
Run Code Online (Sandbox Code Playgroud)

好极了!