.Net——实现IConfigurationSectionHandler接口定义处理程序处理自定义节点

             除了使用.net里面提供的内置处理程序来处理我们的自定义节点外,我们还可以通过多种方法,来自己定义处理类处理我们的自定义节点,本文主要介绍通过实现iconfigurationsectionhandler接口的方式来实现自定义处理程序。

 首先,我们先在配置文件里面写如下自定义节点:

             
13232@qq.com
      lhc      2343254                  
132345232@qq.com
      水田如雅      2343453254          

登录后复制

 然后写对应类进行处理:

namespace MailHandlerClass{   public  class MailServer    {       //存储mailServer的子节点(
13232@qq.com
lhc2343254)的值       //以及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 {        //映射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的处理;

之后,我们在配置文件中将上面的类和节点关联起来:

        
                  

登录后复制

  一定要注意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接口定义处理程序处理自定义节点

                但是学完之后,你再看配置文件,就变成了这样的:

          .Net——实现IConfigurationSectionHandler接口定义处理程序处理自定义节点                 

             

 以上就是.Net——实现IConfigurationSectionHandler接口定义处理程序处理自定义节点的内容,更多相关内容请关注PHP中文网(www.php.cn)!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2550618.html

(0)
上一篇 2025年3月6日 05:59:36
下一篇 2025年3月6日 05:59:43

AD推荐 黄金广告位招租... 更多推荐

发表回复

登录后才能评论