2010-02-16 71 views
2

我們在我們的應用程序中使用了很多配置文件。每個客戶至少有100個不同的xml文件,其中至少包含50-80個名稱/值配置對,並且他們通常都會更改(至少每個月)。在.NET中鍵入配置值/變量

配置文件類似於像下面的東西,

<property id="url" value="s123"/> 
    <property id="input-element-name" value="name" /> 
    <property id="input-element-xpath" value="//body;//form;//table[3];" /> 

目前來讀取XML文件中,我們使用的XmlReader等這個值,並將其存儲在緩存中,一旦應用程序啓動(這可能是巨大的明天當我們的客戶羣增加時)。要訪問屬性ID,我們在靜態類中創建了const變量以避免錯字等,

當我們的配置較少時,這種方法非常棒。現在,維護和添加任何新的配置文件是很痛苦的。需要重建等,只是殺死了保持代碼外的可配置值的概念。

我只是想知道,如果任何.NET空間的最新發展,如M語言,IronPython可以幫助在這裏有配置文件被更改時按需動態鍵入和編譯配置值。我們對xml格式的配置沒有任何保留。總之,我需要的是有一些.XXX文件具有我們的配置值,如果有什麼更改或添加,應該自動編譯,並可以在我們的應用程序中使用,而不創建常量等,我知道類似的東西在VS中發生.T文件。

我希望這可能是可行的..

UPDATE

這個問題的想法是不似乎是正確理解或者我也不會正確讀出。抱歉,添麻煩了。

自定義配置部分可能不適合這個問題,原因是使用ConfigurationSection需要修改代碼,如果我添加任何新的名稱/值對。但是,如果僅在名稱部分映射到代碼中的屬性時更改值,則此方法纔有效。

我想知道如果我使用任何動態語言品種,如IronPython或M語言,我可以將所有XML移動到它並在我的應用程序中,我將能夠看到此文件的任何更改(使用`FileSystemWatcher')並執行它以讀取新添加的配置名稱/值對。

+0

我覺得你有你的答案X 4在2分鐘平坦,瓦迪。 –

+0

這就是SO – asyncwait

回答

1

您可以根據需要實施儘可能多的自定義ConfigurationSections

這將允許您將配置模型建模爲強類型對象。

+0

+1:強類型對象部分也很好,在正常的配置設置下使它更有價值。 – Ian

1

我已經使用了Rick Strahl的typed configuration class - 它對我很好。

+0

+1的威力。但他sed。 –

+0

是的,約翰,我不會使用它,知道構建部分有多容易,但對於配置經驗有限的人來說可能有點令人生畏。我可以看到瑞克班的用途。 AFAIK它沒有壞或什麼,只是有點臭。 –

+0

@Sky:我不是故意暗示它已經壞了,只是它在.NET 2.0中不是必需的。現在有一個標準的方法來做到這一點 - 自定義類不再是必需的。 –

0

請查看System.Configuration命名空間中的類。從.NET 2.0開始,它們就一直存在,併爲您提供對XML配置文件的強類型訪問,並完成驗證。

1

Vadi,外部配置的目的是爲了避免需要重新編譯配置更改。

如果您提供的xml代表您需要使用的信息類型,自定義ConfigurationSection將很好地爲您服務並提供您想要的類型安全性。