Heim  >  Artikel  >  Backend-Entwicklung  >  .Net – Implementieren Sie die IConfigurationSectionHandler-Schnittstelle, um Handler für die Verarbeitung benutzerdefinierter Knoten zu definieren

.Net – Implementieren Sie die IConfigurationSectionHandler-Schnittstelle, um Handler für die Verarbeitung benutzerdefinierter Knoten zu definieren

黄舟
黄舟Original
2017-02-24 10:32:351447Durchsuche

Zusätzlich zur Verwendung der in .net bereitgestellten integrierten Handler zur Verarbeitung unserer benutzerdefinierten Knoten können wir auch verschiedene Methoden verwenden, um unsere eigenen Verarbeitungsklassen zur Verarbeitung unserer benutzerdefinierten Knoten zu definieren Implementierung der IConfigurationSectionHandler-Schnittstelle zum Implementieren benutzerdefinierter Handler.

Zuerst schreiben wir die folgenden benutzerdefinierten Knoten in die Konfigurationsdatei:

 <!-- 使用自定义节点和上面的自定义处理程序-->
  <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>

Anschließend schreiben wir die entsprechende Klasse zur Verarbeitung :

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;
        }
}
}

Tatsächlich ist aus dem Code ersichtlich, dass die Implementierungsidee der benutzerdefinierten Verarbeitungsklasse darin besteht, Hashtable zu verwenden, um das Lesen und Speichern von Schlüsselwerten zu realisieren + XML-Verarbeitung;

Danach verknüpfen wir die oben genannten Klassen und Knoten in der Konfigurationsdatei:

<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>

Achten Sie unbedingt auf die Position des Parameters, wenn der Typ den Wert angibt! ! ! ! ! Andernfalls kommt es zu einer Fehlermeldung, dass der Handler nicht geladen werden kann.

Schreiben Sie einen Code zum Testen:

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); 
            });

        }
    }
}

Nun, eigentlich wird empfohlen, die Konvertierung in as zu erzwingen oder so.

Tatsächlich sieht die Konfigurationsdatei zunächst so aus:

                                       Wenn Sie sich danach die Konfigurationsdatei ansehen, sieht sie so aus so:

🎜 > Das Obige ist .Net – implementieren Sie die IConfigurationSectionHandler-Schnittstelle, um den Handler für die Verarbeitung des Inhalts des benutzerdefinierten Knotens zu definieren PHP chinesische Website (www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn