zoukankan      html  css  js  c++  java
  • .Net——实现IConfigurationSectionHandler接口定义处理程序处理自己定义节点


                 除了使用.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啥的形式。




                    事实上配置文件刚開始看起来是这种:


           

                  



                    可是学完之后,你再看配置文件,就变成了这种:



             

                       

                   感觉so easy~~~~么么哒~~~·









  • 相关阅读:
    JS 图像上传前实现压缩
    php解决微信开发中用户昵称中的特殊字符与emoji表情写入mysql错误的问题
    PHP 删除非法UTF-8字符
    解决airserver在Windows下安装失败的问题
    微信开发自定义菜单数组结构
    在MAC下配置MySQL 5.7 数据库的编码问题
    MAC 系统升级10.10以后PHP验证码错误的解决办法。[ 一行代码轻松解决! ]
    解决ubuntu server mysql load data infile 导入本地文件ERROR 1148 (42000)错误。
    MySQL 批量导入 csv 文件
    bobo【转】使用jQuery解析JSON数据
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/6758089.html
Copyright © 2011-2022 走看看