집 >백엔드 개발 >C#.Net 튜토리얼 >.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; } } }
실제로 사용자 정의 처리 클래스의 구현 아이디어는 해시 테이블을 사용하여 키 값 읽기 및 저장 + 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>
꼭 주의하세요 값 위치를 지정할 때 유형 매개변수에! ! ! ! ! 그렇지 않으면 핸들러를 로드할 수 없다는 오류가 발생합니다.
테스트할 코드를 작성하세요:
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 인터페이스를 구현하여 사용자 정의 노드의 콘텐츠를 처리하는 핸들러를 정의합니다. PHP 중국어 홈페이지(www.php.cn)!