详解C#读取Appconfig中自定义的节点

 更新时间:2015年06月17日 09:25:31   投稿:hebedich  
我们往往需要在App.config中自定义一些节来满足实际需要,而不依赖于App.config的appSettings,下面通过一个简单的实例来说明自定义配置节点的设置与读取

今天在使用Nlog的时候,发现了一个之前没注意的问题。

  以前,我的app配置文件都是这么写的,当然配置比较多的时候会改用xml。

 如果<appSettings>节点中的内容很多的话,我自己有时候都分不清哪个是做什么的,可能朋友们会说,你加个注释不就行了。但是可不可以把一些相同的配置放在一起呢,就像上面的nlog一样。先试着改造下配置文件

复制代码 代码如下:

     <configSections>
         <section name="mySection" type="ConfigSolution.ConfigSectionHandler,ConfigSolution"></section>
     </configSections>
     <mySection>
         <port CPort="40001" WPort="40002" SPort="50000"></port>
         <coustomAssembly CommandsAssembly="HX.Components.Command.Collection" CommandMessagesAssembly="HX.Components.CommandMessage.Collection"></coustomAssembly>
     </mySection>

  那么,怎么获取section里的值呢?从configSections 元素开始到网上风暴了一番。ConfigurationSection 类

 然后知道可以通过ConfigurationManager类的GetSection方法获取到配置文件的信息。(如果应用程序需要以只读方式访问其自身配置,则对于 Web 应用程序,建议使用 GetSection() 重载方法;对于客户端应用程序,建议使用 ConfigurationManager.GetSection 方法。----MSDN)

复制代码 代码如下:

var mySection = ConfigurationManager.GetSection("mySection");

  运行一下程序试试,迎来了第一个异常。System.Configuration.ConfigurationErrorsException: 创建 mySection 的配置节处理程序时出错: 类型“ConfigSolution.ConfigSectionHandler”不从“System.Configuration.IConfigurationSectionHandler”继承。 ---> System.TypeLoadException: 类型“ConfigSolution.ConfigSectionHandler”不从“System.Configuration.IConfigurationSectionHandler”继承。

  既然说我的ConfigSolution.ConfigSectionHandler不从System.Configuration.IConfigurationSectionHandler继承,那好,我就继承它,然后看看这个接口都有些什么东西,Ctrl+T一下(SharpDevelop的快捷键),这接口就一个方法

直接MSDN一下,IConfigurationSectionHandler.Create  信息量不是很大,就一句话:IConfigurationSectionHandler.Create 方法,创建配置节处理程序。算了,直接断点跟踪一下,果然有东西

好了,剩下的就是对xml的读取了。直接把section return看看,

这回程序正常运行了,且mySection 也拿到了配置文件

但是在程序中我们怎么获取这些配置数据呢?我创建了一个处理配置文件的MySectionHelper类,大体如下

   public class MySectionHelper
   {
     readonly XmlNode _section;
     readonly XmlNode _coustomAssembly;
     public MySectionHelper(XmlNode section)
     {
       _section=section;
       _coustomAssembly= _section.SelectSingleNode("coustomAssembly");
     }
     
     public string CommandsAssembly{get{return _coustomAssembly.Attributes["CommandsAssembly"].Value;}}
   }

试试行不行,我的配置文件

   <configSections>
     <section name="mySection" type="ConfigSolution.ConfigSectionHandler,ConfigSolution"></section>
   </configSections>
   <mySection>
     <port CPort="40001" WPort="40002" SPort="50000"></port>
     <coustomAssembly CommandsAssembly="HX.Components.Command.Collection" CommandMessagesAssembly="HX.Components.CommandMessage.Collection"></coustomAssembly>
   </mySection>

运行结果:

好了,一切完成。

以上所述就是本文的全部内容了,希望大家能够喜欢。

相关文章

  • C#中EventWaitHandle的用法小结

    C#中EventWaitHandle的用法小结

    EventWaitHandle是C#中用于线程间同步的一个类,它提供了对共享资源的访问控制,以及线程间的同步机制,本文就来介绍一下EventWaitHandle用法,具有一定的参考价值,感兴趣的可以了解一下
    2025-04-04
  • 使用TypeScript开发微信小程序的方法

    使用TypeScript开发微信小程序的方法

    TypeScript是C#之父Anders Hejlsberg的又一力作,很多喜欢c#语法的朋友对typescript都爱不释手,今天小编给大家介绍下TypeScript开发微信小程序的方法,感兴趣的朋友一起看看吧
    2016-11-11
  • c#linq里的Skip和Take实现分页或遍历

    c#linq里的Skip和Take实现分页或遍历

    LINQ的优势在于它提供了一种直观、类型安全的方式来操作各种类型的数据,查询常需要获取一部分数据,为了实现这一功能,LINQ提供了Take 和Skip运算符,Take运算符用于从一个序列中返回指定个数的元素,Skip运算符用于从一个序列中跳过指定个数的元素
    2024-01-01
  • 详解C#中线程传参,返回值和多线程冲突问题的解决

    详解C#中线程传参,返回值和多线程冲突问题的解决

    这篇文章主要为大家详细介绍了C#中线程传参,返回值和多线程冲突问题的解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-11-11
  • C#实现根据银行卡卡号判断银行名

    C#实现根据银行卡卡号判断银行名

    这篇文章主要介绍了C#实现根据银行卡卡号判断银行名,是从其他网友的java程序改编而来,有需要的小伙伴可以参考下。
    2015-07-07
  • C#多线程与跨线程访问界面控件的方法

    C#多线程与跨线程访问界面控件的方法

    这篇文章主要介绍了C#多线程与跨线程访问界面控件的方法,实例分析了C#多线程与跨线程访问空间的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • C#使用Data Annotations进行手动数据验证

    C#使用Data Annotations进行手动数据验证

    这篇文章介绍了C#使用Data Annotations进行手动数据验证的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • C#中IEnumerable接口介绍并实现自定义集合

    C#中IEnumerable接口介绍并实现自定义集合

    这篇文章介绍了C#中IEnumerable接口并实现自定义集合,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • C#获取路径的几种方式实例分析

    C#获取路径的几种方式实例分析

    这篇文章主要介绍了C#获取路径的几种方式,实例分析了C#常用的路径操作技巧,需要的朋友可以参考下
    2015-06-06
  • httpwebreqeust读取httponly的cookie方法

    httpwebreqeust读取httponly的cookie方法

    下面小编就为大家带来一篇httpwebreqeust读取httponly的cookie方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01

最新评论