• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

c# 搞代码 4年前 (2022-01-09) 30次浏览 已收录 0个评论

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

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

 <!-- 使用自定义节点和上面的自定义处理程序-->  <mailServerGroup provider="www.baidu.com">    <mailServer client="http://blog.gaodaima.com/lhc1105">      <address>[email protected]</address>      <userName>lhc</userName>      <password>2343254</password>    </mailServer>        <mailServer client="http://www.cnblogs.com/liuhuichao/">      <address>[email protected]</address>      <userName>水田如雅</userName>      <password>2343453254</password>    </mailServer>      </mailServerGroup>

然后写对应类进行处理:

namespace MailHandlerClass{   public  class MailServer    {       //存储mailServer的子节点(<address>[email protected]</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 属性中指定的节或元素中的配<div>本文来源gaodai.ma#com搞##代!^码@网3</div>置设置。使用以下格式: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接口定义处理程序处理自定义节点的内容,更多相关内容请随时关注我们网站!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:.Net——实现IConfigurationSectionHandler接口定义处理程序处理自定义节点

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址