.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啥的形式。
其实配置文件刚开始看起来是这样的:
.Net——实现IConfigurationSectionHandler接口定义处理程序处理自定义节点的更多相关文章
- .Net——实现IConfigurationSectionHandler接口定义处理程序处理自己定义节点
除了使用.net里面提供的内置处理程序来处理我们的自己定义节点外,我们还能够通过多种方法,来自己定义处理类处理我们的自己定义节点,本文主要介绍通过实现IConfigurationSectionHand ...
- SharePoint REST API - 使用REST接口对列表设置自定义权限
博客地址:http://blog.csdn.net/FoxDave SharePoint网站.列表和列表项都属于SecurableObject类型.默认情况下,一个安全对象继承父级的权限.对一个对 ...
- AIDL安卓接口定义语言
Android Interface Definition Language简称AIDL翻译为 :安卓 接口 定义 语言 AIDL:进程间通信.Android ...
- 基于动态代理的WebAPI/RPC/webSocket框架,一套接口定义,多个通讯方式
API/RPC/webSocket三个看起来好像没啥相同的地方,在开发时,服务端,客户端实现代码也大不一样 最近整理了一下,通过动态代理的形式,整合了这些开发,都通过统一的接口约束,服务端实现和客户端 ...
- Spring事务管理接口定义
Spring事务管理接口介绍 Spring事务管理接口: PlatformTransactionManager: (平台)事务管理器 TransactionDefinition: 事务定义信息(事务隔 ...
- AIDL —— Android接口定义语言
AIDL:Android Interface Definition Language,即Android接口定义语言,是Android进程间通信比较常用的一种方式.翻译一下,就是为了让某个Service ...
- Java 8新特性-2 接口定义增强
为了解决当原有的接口中方法不足时,向原有的接口中添加新的方法,该接口下的N多实现类也需要重写该方法的问题!Java8引入了接口定义增强概念! Java8 打破了原有的接口的方法定义: 公共的.抽象的 ...
- java数据结构_附11_图的接口定义
图的接口定义 Graph public class UnsupportedOperation extends RuntimeException {public UnsupportedOperation ...
- [Asp.net 5] Configuration-新一代的配置文件(接口定义与基础实现)
关于配置文件的目录:[Asp.net 5] Configuration-新一代的配置文件 本系列文章讲的是asp.net 5(Asp.net VNext)中的配置文件部分,工程下载地址为:https: ...
随机推荐
- ace模板dataTables_length控制是否显示分页
默认的ace中配置的是7列之后才显示分页的,其实是可控的,如下: aoColumns这个参数的含义: 排序控制 $(document).ready(function() {$('#example'). ...
- vim的复制粘贴(包括系统剪贴板)
1.vim常用复制粘贴命令 Vim的复制粘贴命令无疑是y (yank),p(paster),加上yy,P PS: vim有个很有意思的约定(我觉得是一种约定),就是某个命令的大小写都是实现某种功能,只 ...
- POJ 2411Mondriaan's Dream
题目: Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, after prod ...
- 小程序-支持的最小像素px
经过我手机多次测试,支持的最小px为: 8px;
- Codeforces Gym 100203I I WIN 最大流
原题链接:http://codeforces.com/gym/100203/attachments/download/1702/statements.pdf 题解 首先寻找每个I,然后枚举形状,如果匹 ...
- Springboot的Bean的Scope
这周在项目中遇到这样一个Bug,代码大致是这样的,有一个LogEntity日志类,里面有一个InnerLog负责存储每次请求的RPCInfo相关信息, 每次请求的时候会把RPC相关信息加入到Inner ...
- 小W旅游railway
对于一家铁路公司,我们可以首先使用 Floyd 算法求出任 意两点 x, y 间只经过属于该家铁路公司铁路的最短路,那么在新 图中我们在 x, y 间加一条 x 到 y 最短路对应的花费为边权的边. ...
- kafka生产者客户端
kafka的生产者 1. 生产者客户端开发 熟悉kafka的朋友都应该知道kafka客户端有新旧版本,老版本采用scala编写,新版本采用java编写.随着kafka版本的升级,旧版本客户端已经快 ...
- 关于在iOS设备上探测WIFI,3G,GPRS使用情况的细节
由于设计的游戏需要有一些联网请求,但有时候在设备未连接网络的情况下,如果对网络情况不加以判断,则可能造成游戏为了等游戏超时,浪费不必要的时间. 所以在游戏启动时检测一下网络状况是很必要的,而且当玩家的 ...
- 【原创】关于jquery实现格式化时间
//js格式化时间,参数jsonDate可以是后台数据 function jsonDateFormat(jsonDate) { try { var date = new Date(parseInt(j ...