2010-09-20 95 views
2

有沒有什麼方法可以通過所有設置來枚舉配置管理器加載的值?也許我在這裏很密集,但我找不到一種方法來枚舉節組中包含的設置。檢索配置管理器加載的所有配置設置

我有一個WCF服務,它被設計成允許調用系統傳入請求對象,該對象定義了要在服務器上執行的操作。該服務在運行時動態加載程序集(如插件模型)並確定哪個對象可以回答請求。我正在尋找一種方法,可以發送請求以「給我所有的配置信息」,並且該服務可以返回加載的信息。我感興趣的是什麼已經加載到內存中,並正在使用與什麼值在實際的配置文件中指定(配置可以被替換,而不影響內存中的任何東西,直到重新啓動)。

有一個SettingLoaded事件,我可以用它來跟蹤它們,但這似乎很牽強。

任何想法?

這個問題的主要目的是我需要一種方法來確定包含在程序集物理.config文件中的設置與編譯到程序集中作爲「默認」文件的一部分的設置之間的區別。配置。

我不能僅僅使用物理配置文件作爲比較的起點,因爲可能不存在配置文件,或者配置文件可能只提供其中一個值,導致其他人使用它們默認值。

+0

你爲什麼要這樣做? (如果我們知道您要解決什麼問題,我們可能會給您更好的幫助。) – Richard 2010-09-20 12:52:43

+0

已編輯,謝謝! – 2010-09-20 13:29:23

回答

0

也許這裏的解決方案是改變流程/過程,以便所有基於配置的設置都通過配置文件明確提供。這可以通過始終爲任何設置的默認值提供中斷或「已知錯誤」值來保證。這將確保有效值必須由配置文件提供。這種方法將允許使用配置文件作爲比較源進行比較。

這種方法的缺點是所有配置設置都必須合併到主程序集的配置文件中才能使值生效。

1

也許我誤解了你的問題,但對我來說,保證是鍵/值對的唯一設置是AppSettings,你可以通過ConfigurationManager.AppSettings屬性獲得該設置。

+0

夠公平的,你說得對 - 這很簡單。我更多地考慮存儲在applicationSettings組中的設置。在組內部,我可以得到部分(每個程序集),但我看不到任何方式來獲取內存中加載的值。他們已知有格式,但加載的類型當然是未知的。 – 2010-09-20 13:17:36

0

這聽起來像你基本上想擁有一個插件註冊系統。這聽起來像是你試圖區分內存中的內容與加載的內容,因爲你想要檢測註冊何時改變而不重新啓動?

如果這些是真的,一種選擇是創建自己的註冊xml文件並使用FileWatcher類獲取文件發生變化時的事件,然後您可以重新加載註冊信息。

+0

這些程序集只在服務啓動時加載一次,所以我不關心運行時發生的任何更改。爲了更加清晰,我編輯了這個問題。 – 2012-03-23 18:12:43