.Net——實現IConfigurationSectionHandler介面定義處理常式處理自訂節點

來源:互聯網
上載者:User
除了使用.net裡面提供的內建處理常式來處理我們的自訂節點外,我們還可以通過多種方法,來自己定義處理類處理我們的自訂節點,本文主要介紹通過實現IConfigurationSectionHandler介面的方式來實現自訂處理常式。

首先,我們先在設定檔裡面寫如下自訂節點:

 <!-- 使用自訂節點和上面的自訂處理常式-->  <mailServerGroup provider="www.baidu.com">    <mailServer client="http://blog.csdn.net/lhc1105">      <address>13232@qq.com</address>      <userName>lhc</userName>      <password>2343254</password>    </mailServer>        <mailServer client="http://www.cnblogs.com/liuhuichao/">      <address>132345232@qq.com</address>      <userName>水田如雅</userName>      <password>2343453254</password>    </mailServer>      </mailServerGroup>

然後寫對應類進行處理:

namespace MailHandlerClass{   public  class MailServer    {       //儲存mailServer的子節點(<address>13232@qq.com</address><userName>lhc</userName><password>2343254</password>)的值       //以及client的值       private Hashtable serverNode;       //建構函式       public MailServer() { serverNode = new Hashtable(); }       public Hashtable ServerNode { get { return serverNode; } }       public string client { get { return serverNode["client"] as string; } }       public string Address { get { return serverNode["address"] as string; } }       public string UserName { get { return serverNode["userName"] as string; } }       public string PassWord { get { return serverNode["password"] as string; } }    }   //對應mailServerGroup   public class MailServerConfig : List<MailServer> {        //映射provider值       public string Provider { get; set; }      }    //自訂配置節點mailServerGroup的處理常式   public class MailServerConfigurationHandler : IConfigurationSectionHandler {           //section為MailServerGroup節點               public  object  Create(object parent, object configContext, System.Xml.XmlNode section)        {         //設定方法返回設定物件,可以是任何類型            MailServerConfig config = new MailServerConfig();           //擷取節點的屬性資訊            config.Provider = section.Attributes["provider"] == null ? "" : section.Attributes["provider"].Value;           //擷取MailServer節點            foreach (System.Xml.XmlNode child in section.ChildNodes)            {                MailServer server = new MailServer();                //添加Client屬性                if (child.Attributes["client"]!=null)                {                    server.ServerNode.Add("client", child.Attributes["client"].Value);                }                                //擷取MailServer下的Name,username,password節點                foreach (System.Xml.XmlNode grandChild in child.ChildNodes)                {                    //添加文本                    server.ServerNode.Add(grandChild.Name, grandChild.InnerText);                }                //將server加入MailServerConfig                config.Add(server);            }            return config;        }}}

其實從代碼可以看出,自訂處理類的實現思路還是用hashtable來實現key-value的讀取與儲存+對XML的處理;

之後,我們在設定檔中將上面的類和節點關聯起來:

<configuration>  <!--定義處理mailServerGroup配置節的類-->  <configSections>    <section name="mailServerGroup" type="MailHandlerClass.MailServerConfigurationHandler,實現IConfigurationSectionHandler介面"/>        <!--【注意】type:指定用來執行如下操作的配置節處理常式類的名稱:處理在 name 屬性中指定的節或元素中的配置設定。使用以下格式:type=" Fully qualified class name , assembly file name , version , culture , public key token "定義必須匹配程式集引用。-->          </configSections>

一定要注意type指定值時參數的位置!!!!!不然會出現載入不上處理常式的錯誤。

寫段代碼測試下:

namespace MailHandlerClass{    //也可以通過繼承ConfigurationSection類來完成    class Program    {        static void Main(string[] args)        {            MailServerConfig mailServerConfig = (MailServerConfig)ConfigurationManager.GetSection("mailServerGroup");            //讀取節點值            mailServerConfig.ForEach(m => {                Console.WriteLine(m.client+";"+m.Address+";"+m.UserName+";"+m.PassWord);             });        }    }}

額,其實還是建議強轉改為as啥的形式。

其實設定檔剛開始看起來是這樣的:

但是學完之後,你再看設定檔,就變成了這樣的:


以上就是.Net——實現IConfigurationSectionHandler介面定義處理常式處理自訂節點的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.