一遍又一遍地从 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 中读取整数的主要内容,如果未能解决你的问题,请参考以下文章