2010-09-10 75 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模板爲你自動生成事物。