2010-01-20 47 views
1

雖然名義上這個問題類似於thisthis,但事實並非如此。如何訪問當前應用程序的app.config/web.config?

我目前正在開發一個庫,可能需要一些自定義配置取決於用戶的願望。

我已經創建了自定義配置部分,並且一切正常。

但是,當我調試時,我注意到配置節構造函數被調用兩次。這不是我的意圖。

進一步挖掘,我發現它的發生是因爲,爲了從庫中獲取配置信息,我用下面的方法:

var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
var section = config.GetSection("myConfigSection"); 

此之前,.NET框架已經初始化配置環境運行庫的應用程序,從而調用MyConfigSection類的構造函數。

我的問題是,如何訪問已經加載的信息?

爲什麼類的構造函數被調用兩次

因爲我不想再重裝所有的東西,如上面的代碼一樣。


編輯補充

的構造函數被調用,甚至兩次改變上述代碼:

var section = ConfigurationManager.GetSection("myConfigSection"); 

編輯,以澄清

這個問題不是回合訪問MyConfigSection,我訪問它就好了。

問題是關於爲什麼類的構造函數被調用兩次


更多的澄清

如果類的構造函數被調用兩次的一點點,加載過程中發生了兩次。

而我根本不希望發生這種情況。這很荒謬。

是的,我打電話給Configurationmanager的靜態方法,根據我在這個問題中的第一次編輯。

+0

請將.net添加到您的標籤 – z3cko

+0

@ z3cko只是做了。 –

回答

0

經過進一步調查,構造函數被調用兩次,因爲以下情況:

  1. .NET框架創建一個類時,它在<configSections>元素找到<section name="..." type="..." />
  2. 如果在.NET Framework中配置了app.configweb.config中的一節,則會創建指定類的另一個實例來解碼該節並與已創建的實例合併。

雖然它根據文檔的工作,這個行爲可能與ConfigurationSection執行如果開發商認爲只有一個對象在應用程序的生命週期中產生衝突。

所以,下面這個思路,如果指定的配置,也就是說,machine.configapp.configuser.config對象將被以合併在一起的一切構建三次。

0

您問了兩個問題:爲什麼ctor被調用了兩次,以及如何訪問已加載的配置。

你已經指出了它被調用兩次的原因。配置系統在加載應用程序時解析配置文件。它通過ConfigurationManager的靜態成員進行配置,包括ConfigurationManager.AppSettingConfigurationManager.GetSection()

您可以使用這些靜態成員訪問已加載的配置。

相關問題