Rumah pembangunan bahagian belakang Tutorial C#.Net .Net——实现IConfigurationSectionHandler接口定义处理程序处理自定义节点

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

Feb 24, 2017 am 10:32 AM

             除了使用.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>
Salin selepas log masuk

然后写对应类进行处理:

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;
        }
}
}
Salin selepas log masuk

其实从代码可以看出,自定义处理类的实现思路还是用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>
Salin selepas log masuk

一定要注意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); 
            });

        }
    }
}
Salin selepas log masuk

额,其实还是建议强转改为as啥的形式。

其实配置文件刚开始看起来是这样的:

              

                但是学完之后,你再看配置文件,就变成了这样的:

                           

             

 以上就是.Net——实现IConfigurationSectionHandler接口定义处理程序处理自定义节点的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1663
14
Tutorial PHP
1266
29
Tutorial C#
1239
24
Kongsi beberapa rangka kerja projek berkaitan AI dan LLM sumber terbuka .NET Kongsi beberapa rangka kerja projek berkaitan AI dan LLM sumber terbuka .NET May 06, 2024 pm 04:43 PM

Perkembangan teknologi kecerdasan buatan (AI) sedang giat dijalankan hari ini, dan ia telah menunjukkan potensi dan pengaruh yang besar dalam pelbagai bidang. Hari ini Dayao akan berkongsi dengan anda 4 rangka kerja projek berkaitan LLM model AI sumber terbuka .NET, dengan harapan dapat memberi anda sedikit rujukan. https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel ialah kit pembangunan perisian sumber terbuka (SDK) yang direka untuk menyepadukan model bahasa besar (LLM) seperti OpenAI, Azure

Apakah prospek pekerjaan C#? Apakah prospek pekerjaan C#? Oct 19, 2023 am 11:02 AM

Sama ada anda seorang pemula atau profesional yang berpengalaman, menguasai C# akan membuka jalan untuk kerjaya anda.

Teknologi pengoptimuman prestasi .NET untuk pembangun Teknologi pengoptimuman prestasi .NET untuk pembangun Sep 12, 2023 am 10:43 AM

Jika anda seorang pembangun .NET, anda mesti sedar tentang kepentingan mengoptimumkan fungsi dan prestasi dalam menyampaikan perisian berkualiti tinggi. Dengan menggunakan pakar sumber yang disediakan dan mengurangkan masa memuatkan tapak web, anda bukan sahaja mencipta pengalaman yang menyenangkan untuk pengguna anda tetapi juga mengurangkan kos infrastruktur.

Perbezaan prestasi antara rangka kerja Java dan rangka kerja .NET Perbezaan prestasi antara rangka kerja Java dan rangka kerja .NET Jun 03, 2024 am 09:19 AM

Dari segi pemprosesan permintaan selaras tinggi, .NETASP.NETCoreWebAPI berprestasi lebih baik daripada JavaSpringMVC Sebabnya termasuk: Kompilasi awal AOT, yang mengurangkan masa permulaan pengurusan memori, di mana pembangun bertanggungjawab untuk memperuntukkan dan melepaskan memori objek.

C# .NET: Meneroka Konsep Teras dan Asas Pengaturcaraan C# .NET: Meneroka Konsep Teras dan Asas Pengaturcaraan Apr 10, 2025 am 09:32 AM

C# adalah bahasa pengaturcaraan yang berorientasikan objek moden yang dibangunkan oleh Microsoft dan sebagai sebahagian daripada Rangka Kerja .NET. 1.C# menyokong pengaturcaraan berorientasikan objek (OOP), termasuk enkapsulasi, warisan dan polimorfisme. 2. Pengaturcaraan Asynchronous dalam C# dilaksanakan melalui Async dan menunggu kata kunci untuk meningkatkan respons aplikasi. 3. Gunakan LINQ untuk memproses koleksi data dengan ringkas. 4. Kesilapan umum termasuk pengecualian rujukan null dan pengecualian indeks luar. Kemahiran penyahpepijatan termasuk menggunakan debugger dan pengendalian pengecualian. 5. Pengoptimuman Prestasi termasuk menggunakan StringBuilder dan mengelakkan pembungkusan yang tidak perlu dan unboxing.

C# .NET Soalan & Jawapan Wawancara: Tahap kepakaran anda C# .NET Soalan & Jawapan Wawancara: Tahap kepakaran anda Apr 07, 2025 am 12:01 AM

C#.NET Soalan dan jawapan wawancara termasuk pengetahuan asas, konsep teras, dan penggunaan lanjutan. 1) Pengetahuan asas: C# adalah bahasa berorientasikan objek yang dibangunkan oleh Microsoft dan digunakan terutamanya dalam rangka .NET. 2) Konsep teras: Delegasi dan peristiwa membolehkan kaedah mengikat dinamik, dan LINQ menyediakan fungsi pertanyaan yang kuat. 3) Penggunaan Lanjutan: Pengaturcaraan Asynchronous meningkatkan respons, dan pokok ekspresi digunakan untuk pembinaan kod dinamik.

Relevan berterusan C# .NET: Lihat penggunaan semasa Relevan berterusan C# .NET: Lihat penggunaan semasa Apr 16, 2025 am 12:07 AM

C#.NET masih penting kerana ia menyediakan alat dan perpustakaan yang kuat yang menyokong pelbagai pembangunan aplikasi. 1) C# menggabungkan rangka kerja NET untuk menjadikan pembangunan cekap dan mudah. 2) Mekanisme keselamatan dan sampah jenis C#meningkatkan kelebihannya. 3) .NET menyediakan persekitaran berjalan lintas platform dan API yang kaya, meningkatkan fleksibiliti pembangunan.

Dari web ke desktop: fleksibiliti C# .net Dari web ke desktop: fleksibiliti C# .net Apr 15, 2025 am 12:07 AM

C#.netisversatileforbothwebanddesktopdevelopment.1) Forweb, useasp.netfordynamicapplications.2) Fordesktop, ExployWindowsFormsor Wpfforrichinterfaces.3) UseXamarinforcross-platformdevelopment, enablingcodesharingacrosswindows, macOS, linux, andmobiledevices.

See all articles