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

时间:2010-09-10 18:20:01

标签: web-config appsettings

我做的很多是从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的某种结构中,所以我最终不会遇到运行时错误,但我不知道我是如何处理它的。 ..或者如果这是可能的话。

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

还有一件事......

将此设置为readonly不是一个好主意吗?

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

3 个答案:

答案 0 :(得分:17)

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

可以在Scott Allen's blog 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"]); 
     }
   }
}

这样做的好处有三方面:

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

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

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

Config.PageSize

Config.HighlightedProductId

耶!

答案 1 :(得分:0)

看看T4Config。我将使用适当数据类型中的值的Lazyloading生成web / app配置的appsettings和connectionstringsections的接口和具体实现。它使用简单的T4模板为您自动生成内容。

答案 2 :(得分:-1)

为避免创建自行车课程,您可以使用;

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