【问题标题】:Reading integers from AppSettings over and over一遍又一遍地从 AppSettings 中读取整数
【发布时间】:2011-04-10 20:59:49
【问题描述】:

我经常做的一些事情是从 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") 似乎不起作用。

【问题讨论】:

    标签: web-config appsettings


    【解决方案1】:

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

    它位于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)
    • 由于我只编写一次配置字符串,因此我执行常规 int.Parse。

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

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

    Config.PageSize
    
    Config.HighlightedProductId
    

    耶!

    【讨论】:

    • 虽然这似乎是处理此特定问题的最佳方式,但我不知道您是否可以将此称为 DRY。您添加的每个新整数都需要 Web.Config 键和 Config 类属性。如果您不需要 Web.Config 转换的强大功能(不太可能,因为它们很有用),您可以将它们全部直接放在 Config/Constants 类中,而无需使用 int.Parse()
    • 如果用户在应用设置中放入字符串怎么办?这会抛出异常,并且没有异常处理或默认设置。
    【解决方案2】:

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

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

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

    【讨论】:

    • 我会咬的。什么是自行车课?
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多