[.NET] 自訂Configuration區段的未定義Attribute讀寫

[.NET] : 自訂Configuration區段的未定義Attribute讀寫


前言 :

我們在撰寫自訂 Configuration時,會先定義好對應的自訂 ConfigurationSection 與 Config檔讓程式碼知道該如何頗析資料。


<sample propertyA="Clark001">
  <propertyCollectionB>
    <add name="Clark002" value="Clark003" />
  </propertyCollectionB>    
</sample>


public class SampleSection : ConfigurationSection
{
    [ConfigurationProperty("propertyA")]
    public string PropertyA
    {
        get
        {
            return (string)base["propertyA"];
        }
        set
        {
            base["propertyA"] = value;
        }
    }

    [ConfigurationProperty("propertyCollectionB")]
    public NameValueConfigurationCollection PropertyCollectionB
    {
        get
        {
            return (NameValueConfigurationCollection)base["propertyCollectionB"];
        }
    }  
}

但是當我們的 Config檔為下列XML,其中 propertyC的 Attribute是不固定數量與名稱的時候。
上列的實作方法無法滿足這樣的需求。


<sample propertyA="Clark001">
  <propertyCollectionB>
    <add name="Clark002" value="Clark003" />
  </propertyCollectionB>
  <propertyC A="Clark004" B="Clark005" />
</sample>

本篇文章描述,如何使用程式碼來完成這樣的需求。


注意 :

在 Microsoft Visual Studio IDE除錯環境下,執行程式寫入.config時。
程式寫入的將會是*.vshost.exe.config,而不是預期中的 *.exe.config。
並且程式執行結束之後,IDE會覆蓋*.vshost.exe.config成為寫入前的狀態。
因此會誤認為程式執行失敗。


只要編譯完畢之後,
點選bin目錄底下的*.exe,再去檢查*.exe.config,就可以看到預期中的結果。


相關資料 :

[ASP.NET]撰寫自己的 Configuration 區段 Part 1 : http://www.dotblogs.com.tw/regionbbs/archive/2009/05/08/custom_configuration_section_in_web_config.aspx
[ASP.NET]撰寫自己的 Configuration 區段 Part 2 : http://www.dotblogs.com.tw/regionbbs/archive/2009/09/17/orgainzeyoursectionintogroupforconfiguration.aspx
[ASP.NET]撰寫自己的 Configuration 區段 Part 3 : http://www.dotblogs.com.tw/regionbbs/archive/2009/10/09/customconfigurationelementcollection.aspx
[.NET] : 自訂Configuration區段的資料寫入 : http://www.dotblogs.com.tw/clark/archive/2010/12/23/20338.aspx


實作 :

檔案下載 : Clk.ConfigurationSample2.zip


專案加入或引用 UnrecognizedAttributeConfigurationElement、UnrecognizedAttributeDictionary
image
image


自訂ConfigurationSection
image


設定.Config
image


寫入程式
image


執行結果
image
image


後記 :

自訂Configuration區段,使用UnrecognizedAttributeConfigurationElement、UnrecognizedAttributeDictionary。
來做未定義的Attribute讀取跟寫入,其實蠻方便的 :D。

期許自己
能以更簡潔的文字與程式碼,傳達出程式設計背後的精神。
真正做到「以形寫神」的境界。