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

Posted

技术标签:

【中文标题】一遍又一遍地从 AppSettings 中读取整数【英文标题】:Reading integers from AppSettings over and over 【发布时间】: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") 似乎不起作用。

【问题讨论】:

【参考方案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 模板为您自动生成东西。

【讨论】:

以上是关于一遍又一遍地从 AppSettings 中读取整数的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 axios 使用 React.useEffect 一遍又一遍地从 Rails 后端获取调用?

CoreData关系一遍又一遍地保存了两个

如何阻止innerHtml表一遍又一遍地重复自己?

为啥 OnPreRender 被一遍又一遍地调用?

一遍又一遍地运行代码

Google Cloud Run 一遍又一遍地错误运行