19

我经常做的一些事情是从 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;
}

但这只是为了节省一些击键。

理想情况下,我很乐意将它们全部放入某种可以使用智能感知的结构中,这样我就不会遇到运行时错误,但我不知道如何解决这个问题......或者如果这是可能的。

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

还有一件事...

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

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

4

3 回答 3

21

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

它可以在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"]); 
     }
   }
}

这样做的好处有三方面:

  • 智能感知
  • 一个断点(DRY)
  • 由于我只编写一次配置字符串,因此我执行常规 int.Parse。

如果有人更改了 AppSetting 键,它会损坏,但我可以处理,因为这些值没有更改并且性能优于 aTryParse并且可以固定在一个位置。

解决方法就是这么简单……不知道为什么之前没有想到。像这样调用这些值:

Config.PageSize

Config.HighlightedProductId

耶!

于 2010-09-16T20:05:14.680 回答
0

看看T4Config。我将使用延迟加载正确数据类型中的值来生成您的 web/app 配置的 appsettings 和 connectionstringsections 的接口和具体实现。它使用一个简单的 T4 模板为您自动生成东西。

于 2017-04-07T17:27:52.767 回答
-2

为避免创建自行车类,您可以使用以下内容:

System.Configuration.Abstractions.AppSettings.AppSetting<int>("intKey");

https://github.com/davidwhitney/System.Configuration.Abstractions

于 2016-04-05T18:34:14.753 回答