ホームページ  >  記事  >  バックエンド開発  >  .Net - IConfigurationSectionHandler インターフェイスを実装して、カスタム ノードを処理するハンドラーを定義します。

.Net - IConfigurationSectionHandler インターフェイスを実装して、カスタム ノードを処理するハンドラーを定義します。

黄舟
黄舟オリジナル
2017-02-24 10:32:351448ブラウズ

.NET で提供される組み込み処理プログラムを使用してカスタム ノードを処理することに加えて、複数のメソッドを使用してカスタム ノードの処理を派生し、カスタム ハンドラーを実装することもできます。


まず、構成ファイルに次のカスタム ノードを記述します:

 <!-- 使用自定义节点和上面的自定义处理程序-->
  <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>
まあ、実際には as などに強制的に変換することをお勧めします。

実際、設定ファイルは最初は次のようになります:

上記は、カスタム ノード コンテンツを処理する .NET -iconfigurationSectionHandler インターフェイス定義プロセスの実装です。 PHP 中国語 Web サイト (www.php.cn) に注意してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。