2010-09-10 74 views
9

我从AppSettings中读取了很多整数。什么是最好的方法来做到这一点?从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; 
} 

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

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

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

一件事...

不会是设置此为readonly一个好主意?

readonly int pageSize = Helpers.GetSettingInt("PAGE_SIZE")似乎没有工作。

+0

对不起,我的错误,没有意识到它是WinForms特定的。 – 2010-09-10 18:38:44

+0

没问题。不过,您的'只读'链接很有用。我应该更清楚它是用于Web的......因为我意识到WinForms使用“AppSettings”,而我正在谈论Web.Config的AppSettings部分 – Armstrongest 2010-09-10 18:46:48

回答

12

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

它在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)
  • 由于我只写了配置字符串ONCE,我做了一个普通的int.Parse。

如果有人改变了AppSetting关键,这将打破,但我能处理的,因为这些值都没有改变,性能比TryParse更好,它可以固定在一个位置。

解决方案非常简单......我不知道为什么我之前没有想到它。调用如下的值:

Config.PageSize 

Config.HighlightedProductId 

Yay!

+0

虽然这似乎是处理最好的方法这个特殊的问题,我不知道你可以称之为DRY。您添加的每个新整数都需要一个'Web.Config'键和一个'Config'类属性。 如果你不需要'Web.Config'变换的力量(不太可能,因为它们很有用),你可以直接将它们全部放在Config/Constants类中,并且不需要int.Parse( ) – arserbin3 2014-05-01 19:46:35

+0

如果用户在应用程序设置中放置了一个字符串会怎么样?这会引发异常,并且没有异常处理或默认设置。 – SharpC 2014-10-01 15:26:45

-1

为了避免创建一个自行车班,你可以使用;

System.Configuration.Abstractions method .AppSettings.AppSetting<int>("intKey");https://github.com/davidwhitney/System.Configuration.Abstractions 
0

看看T4Config。我将使用适当数据类型中的值的Lazyloading生成一个界面,并具体实现您的web/app配置的appsettings和connectionstringctions。它使用一个简单的T4模板为你自动生成事物。