代码之家  ›  专栏  ›  技术社区  ›  Armstrongest

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

  •  11
  • Armstrongest  · 技术社区  · 15 年前

    而不是每次都这么做:

    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 回复  |  直到 15 年前
        1
  •  20
  •   Armstrongest    15 年前

    我找到了问题的答案。它一开始需要额外的工作,但最终会减少错误。

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

    这样做的好处有三个:

    • 智能感知
    • 一个断点(干)
    • 因为我只写了一次配置字符串,所以我做了一个常规的内部解析.

    如果有人更改AppSetting键,它会中断,但我可以处理,因为这些值不会更改,而且性能比 TryParse 它可以固定在一个地方。

    解决办法很简单。。。我不知道为什么我以前没有想到。这样调用值:

    Config.PageSize
    
    Config.HighlightedProductId
    

    耶!

        2
  •  0
  •   Ryan Anderson    8 年前

    T4Config . 我将使用Lazyloading在适当的数据类型中加载值来生成一个接口和具体的实现。它使用一个简单的T4模板来自动生成你的东西。

        3
  •  -2
  •   ruffin    5 年前

    为了避免创建bicycle类,可以使用以下方法:

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

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

    推荐文章