如果现在我们需要在app.config一个节点的在下面的例子中,定义,我们需要如何进行操作?

<configSections>
<section name="integration.config" type="UtilityComponent.WinService.Utilities.Config.Integration.IntegrationSection, UtilityComponent.WinService"/>
</configSections> <integration.config>
<listeners>
<add queue="my_queue_Publish" service="PublishService"/>
<add queue="my_queue_sub" service="SubscribeService"/>
</listeners>
</integration.config>

那么这个节点的各个字段都代表什么意思?section中name指的是你自己定义的这个section的名字。type指的是用于接收这个section中相应字段的类,在程序执行的时候CLR会通过反射将各个字段赋值给这个类的相应属性。

在这里,listeners是一个集合,所以我们要用一个继承自ConfigurationElementCollection的类来进行接收。

   [NamedSection("integration.config")]
public class IntegrationSection : ConfigurationSection
{
//这个属性是用来接收listeners这个节点集合。 这个类继承自ConfigurationElementCollection. 须要在这个属性上边
//用Attribute的方式表明相应的节点名称,这样在转换的时候,利用反射,才知道去哪个节点找这个值
[ConfigurationProperty("listeners", IsRequired = false)]
public EndpointCollection EndpointCollection
{
get { return (EndpointCollection)this["listeners"]; }
}
} public class EndpointCollection : ConfigurationElementCollection, IEnumerable<EndpointElement>
{
protected override ConfigurationElement CreateNewElement()
{
return new EndpointElement();
} protected override object GetElementKey(ConfigurationElement element)
{
return ((EndpointElement)element).Queue;
} public new IEnumerator<EndpointElement> GetEnumerator()
{
int count = Count;
for (var i = 0; i < count; i++)
{
yield return BaseGet(i) as EndpointElement;
}
}
} public class EndpointElement : ConfigurationElement
{
//这里须要表明是哪个字段。执行时才干利用反射把相应字段相应的值放到这个属性中来
[ConfigurationProperty("queue", IsKey = true)]
public string Queue
{
get { return (string)this["queue"]; }
set { this["queue"] = value; }
} [ConfigurationProperty("service", IsKey = false, IsRequired = false)]
public string Service
{
get { return (string)this["service"]; }
set { this["service"] = value; }
} public override bool IsReadOnly()
{
return false;
}
}

ConfigurationElement是最主要的类,ConfigurationElementCollection起到了协调的作用。

通过ConfigurationElementCollection的Attribute才干找到相应的配置文件的节点。之后节点找到了,一切就简单了。这时候我们就相应节点中的单个节点,写ConfigurationElement这个类,把相应的字段相应到相应的属性上边就能够了。可是这里有还有一种情况。

<configSections>
<section name="integration.config" type="UtilityComponent.WinService.Utilities.Config.Integration.IntegrationSection, UtilityComponent.WinService"/>
</configSections> <integration.config>
<listeners>
<add queue="my_queue_Publish" service="PublishService"/>
<add queue="my_queue_sub" service="SubscribeService"/>
</listeners> <service.info name="WMSScenarioService" description="WMS Use case implemented using NVS windows service."/>
</integration.config>

我们怎么去接收这个service.info?非常显然这里我们须要在IntegrationSection添加一个属性,一个直接继承自ConfigurationElement的属性来接收。注意,这里我们也须要给这个属性添加一个Attribute来告诉CRL。在反射的时候。是把哪个字段来赋给这里的属性。那为什么在上一个的样例中。我们没有在EndpointCollection中特别指明节点名字呢?由于你能够看出,listeners下边。每一个节点的名字都是add. 跟这个样例不同。

我们能够这样理解,依据Collection的Atrribute找到了listners,然后我们就用对应的ConfigurationElement来接收即可了,可是我们写这个类的时候,就要用Attribute把每一个属性写清楚。

ConfigurationManager.GetSection("integration.config") as IntegrationSection,这里CLR就会把对应的值给对应的属性。这一句代码是最为关键的代码,是CLR对配置文件进行读取解析,然使用反射来每个字段后,值分配来处理相应的属性。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

它们的定义app.config中间section节点和在执行中使用的更多相关文章

  1. C# 对 App.config的appSettings节点数据进行加密

    .NET平台下的Winform和Asp.net的配置文件默认都是明文保存的,本文使用的是.Net自身如何加密配置文件,不包含自定义的加密规则 但.Net是提供了直接对配置文件加密的功能的,使用.Net ...

  2. C# 读取app.config配置文件 节点键值,提示 "配置系统未能初始化" 错误的解决方案

    新建C#项目,在app.config中添加了appSettings项,运行时出现"配置系统未能初始化"的错误,MSDN里写到,如果配置文件中包含 configSections 元素 ...

  3. App.Config自定义配置节点

    配置文件: <?xml version="1.0" encoding="utf-8"?> <configuration> <con ...

  4. app.config 配置多项 配置集合 自定义配置

    C#程序的配置文件,使用的最多的是appSettings 下的<add key="Interval" value="30"/>,这种配置单项的很方便 ...

  5. 如何修改 app.config 的配置信息

    如何修改 app.config 的配置信息 收藏 最问这个问题的人有点多,其实 .Net 提供了这样的功能我们可以在 app.config 中 userSettings 节点中保存我们的应用程序设置信 ...

  6. winform程序读取和改写配置文件App.config元素的值

    winform程序读取和改写配置文件App.config元素的值 2016-05-16 17:49 by newbirth, 2412 阅读, 0 评论, 收藏, 编辑 1 2 3 4 5 6 7 & ...

  7. C# 读写App.config配置文件

    一.C#项目中添加App.config配置文件 在控制台程序中,默认会有一个App.config配置文件,如果不小心删除掉,或者其他程序需要配置文件,可以通过添加得到. 添加步骤:右键项目名称,选择“ ...

  8. 修改 App.Config 配置文件 C#

    [转]在WCF程序中动态修改app.config配置文件 今天在个WCF程序中加入了修改配置文件的功能.我是直接通过IO操作修改的app.config文件内容,修改后发现发现其并不生效,用Google ...

  9. [C#.Net]对WinForm应用程序的App.config的使用及加密

    我们在写C#应用程序时,在工程文件中放置一个app.config,程序打包时,系统会将该配置文件自动编译为与程序集同名的.exe.config 文件.作用就是应用程序安装后,只需在安装目录中找到该文件 ...

随机推荐

  1. 非对称加密算法RSA使用注意事项

    原文:非对称加密算法RSA使用注意事项 第一个问题,也是最重要的一个——RSA无法对超过117字节的数据进行加密!切记!其实也勿需要求对更大数据的加密,虽然网上已经有相关解决方案,比如BigInteg ...

  2. 迅雷云加速开放平台c#demo

    迅雷云加速开放平台c#demo.很多人很遇到下载文件的问题.这个例子是调用迅雷云加速开放平台的dll,进行下载,速度很快,下载过程中可以获取到很全的下载信息,比如下载速度,进度,完成状态等. 例子中带 ...

  3. 【最小割】HDU 4971 A simple brute force problem.

    说是最大权闭合图.... 比赛时没敢写.... 题意 一共同拥有n个任务,m个技术 完毕一个任务可盈利一些钱,学习一个技术要花费钱 完毕某个任务前须要先学习某几个技术 可是可能在学习一个任务前须要学习 ...

  4. 菜鸟教程工具(三)——Maven自己主动部署Tomcat

    书连接至背面,在博客上,他介绍了如何使用Maven该项目包,这篇文章说,关于如何使用Maven会踢war部署包Tomcat.而不是手动copy过去. 眼下比較流行的方式有两种:一种是利用Tomcat官 ...

  5. MINA2 源代码学习--源代码结构梳理

    一.mina总体框架与案例: 1.总体结构图: 简述:以上是一张来自网上比較经典的图,总体上揭示了mina的结构,当中IoService包括clientIoConnector和服务端IoAccepto ...

  6. UVA - 10714 Ants

    最多时间就是每仅仅蚂蚁选择最久的爬行方式 最少时间就是每仅仅蚂蚁选择最快地爬行方式 #include<iostream> #include<map> #include<s ...

  7. bootstrap使用汇总

    //大多数功能都能够指定data属性来指定 但是,有必要的情况下使用jquery由于事件是不同的过程 //活动通常有两种状态show shown 通用和过去的 <!DOCTYPE html> ...

  8. Mina框架与Spring整合配置文件

    Mina框架与Spring的整合事实上非常easy,主要是要弄清楚要注入的属性的名称,进而选择合适的注入方法. 关于Spring的四种注入方法请还有一篇文章:spring依赖注入的四种方式 <? ...

  9. HDU 2203 亲串(kmp)

    Problem Description 随着人们年龄的增长更大,更聪明还是越大越愚蠢,这是一个值,相同的问题Eddy也一直在思考,由于他在非常小的时候就知道亲和串怎样推断了,可是发现,如今长大了却不知 ...

  10. HTML5中类jQuery选择器querySelector的高级使用 document.querySelectorAll.bind(document);

    基本用法 querySelector 该方法返回满足条件的单个元素.按照深度优先和先序遍历的原则使用参数提供的CSS选择器在DOM进行查找,返回第一个满足条件的元素. ----> querySe ...