关于ConfigurationSection自定义config的简单使用
1.1、自定义config结构(参考对应颜色标注),放到configuration根节点下:
<test>
<testInfos>
<testInfo aa="aaKeyStr1" bb="" />
<testInfo aa="aaKeyStr2" bb="" />
</testInfos>
<testC cc="ccStr" />
</test>
推荐独立文件引用:
将1.1中自定义config新建为xml文件,命名:test.config
configuration根节点下添加:
<test configSource="test.config" />
1.2、config文件下需添加对应配置:
configSections节点下添加,name为自定义config的根节点,type为根节点类的命名空间.类名, 命名空间:
<section name="test" type="CMDTest.TestConfigurationSection, CMDTest" />
2、创建根节点类TestConfigurationSection,继承ConfigurationSection,对应自定义config中test节点:
public class TestConfigurationSection : ConfigurationSection
{
[ConfigurationProperty("testInfos", IsDefaultCollection = true)]
public TestInfoElementCollection ContractInfos
{
get
{
return (TestInfoElementCollection)base["testInfos"]; // 子列表节点
}
}
[ConfigurationProperty("testC", IsDefaultCollection = true)]
public TestCElement TestC
{
get
{
return (TestCElement)base["testC"]; // 单个子节点
}
}
}
3.1、(子节点为集合时使用)创建子节点Collection类,继承ConfigurationElementCollection,对应自定义config中testInfos节点:
public class TestInfoElementCollection : ConfigurationElementCollection
{ protected override ConfigurationElement CreateNewElement()
{
return new TestInfoElement();
} protected override object GetElementKey(ConfigurationElement element)
{
return ((TestInfoElement)element).AA; // 指定AA属性为唯一索引
}
public override ConfigurationElementCollectionType CollectionType
{
get
{
return ConfigurationElementCollectionType.BasicMap;
}
}
protected override string ElementName
{
get
{
return "testInfo"; // 子节点名称
}
}
}
3.2、创建列表子元素类,继承ConfigurationElement(单个子节点均可继承此类),对应自定义config中testInfo节点:
public class TestInfoElement : ConfigurationElement
{
[ConfigurationProperty("aa", IsRequired = true)] // 是否必填
public string AA
{
get
{
return (string)base["aa"]; // 节点属性名称
}
} [ConfigurationProperty("bb")]
public string BB
{
get
{
return (string)base["bb"];
}
}
}
4、(子节点为单个节点时使用)同3.2,对应自定义config中testC节点:
public class TestCElement : ConfigurationElement
{
[ConfigurationProperty("cc", IsRequired = true)]
public string CC
{
get
{
return (string)base["cc"];
}
}
}
5、调用代码Demo:
var tcs = (TestConfigurationSection)ConfigurationManager.GetSection("test");
// 读取单个子节点
var testC = tcs.TestC;
// 读取list节点
Dictionary<string, string> list = new Dictionary<string, string>();
foreach (TestInfoElement item in tcs.ContractInfos)
{
list.Add(item.AA, item.BB);
}
var aa = list["aaKeyStr1"];
运行效果:

心得:我理解的自定义config无非就是将节点抽象成对象属性,对应的属性需继承相关父类进行读取,对象类的结构需与config结构对应;编写时遇到复杂的config需注意树的深度以及节点、属性对应名称,容易写错,需细心
附上示例源码地址:https://gitee.com/GongQun/TestRun/tree/develop/
如有错误,请指正,谢谢!
关于ConfigurationSection自定义config的简单使用的更多相关文章
- List<T>集合的Sort自定义排序用法简单解析
List<T>集合的Sort自定义排序用法简单解析: 如下:一系列无序数字,如果想要他们倒序排列,则使用如下代码: 那么如何理解这段代码呢? (x,y)表示相邻的两个对象,如果满足条件:x ...
- python+selenium之自定义封装一个简单的Log类
python+selenium之自定义封装一个简单的Log类 一. 问题分析: 我们需要封装一个简单的日志类,主要有以下内容: 1. 生成的日志文件格式是 年月日时分秒.log 2. 生成的xxx.l ...
- 释放SQL Server占用的内存 .Net 读取xml UrlReWriter 在web.config中简单的配置
释放SQL Server占用的内存 由于Sql Server对于系统内存的管理策略是有多少占多少,除非系统内存不够用了(大约到剩余内存为4M左右),Sql Server才会释放一点点内存.所以很多 ...
- Python自定义线程类简单示例
Python自定义线程类简单示例 这篇文章主要介绍了Python自定义线程类,结合简单实例形式分析Python线程的定义与调用相关操作技巧,需要的朋友可以参考下.具体如下: 一. 代码 # - ...
- Python+Selenium中级篇之8-Python自定义封装一个简单的Log类《转载》
Python+Selenium中级篇之8-Python自定义封装一个简单的Log类: https://blog.csdn.net/u011541946/article/details/70198676
- 在.net中读写config文件的各种方法(自定义config节点)
http://www.cnblogs.com/fish-li/archive/2011/12/18/2292037.html 阅读目录 开始 config文件 - 自定义配置节点 config文件 - ...
- .net 中读取自定义Config文件
今天做一个windows插件式服务程序,插件有时要读取配置文件的设置,但是服务是动态加载到服务上的,没有办法作到动态修改服务的配置文件(app.config).在.net 2.0中有一个Configu ...
- salesforce 零基础学习(二十六)自定义图表chart简单介绍(使用apex和VF实现)
chart在报表中经常使用到,他可以使报表结果更加直观的展现给用户.salesforce支持VF和apex代码来更好的展示chart. chart分类:常用的图表样式有饼状图,柱状图,折线图,条形图, ...
- iOS 实现Tabbarcontroller中间自定义样式 最简单的方法
先上图: 如果我们要实现中间按钮自定义样式,方法应该蛮多,这里介绍一种最简单的. 1.创建类继承:UITabBarController,如下代码都是写在该类的 .m文件里 2.定义最中间的自定义样式, ...
随机推荐
- html基础——div/span
div是一个块标签/盒子标签,单独占据一行 span不会占据一块,一般是用来修改某几个文字的格式 比如一行字,需要将每一句的首字母大写,就可以使用span标签 如果是要将一个段落的字加样式,两个都可以 ...
- Linux下使用Nginx做CDN服务器下的配置
由于使用docker配置Nginx比较方便,所以博主就使用docker做为容器配置下 第一步.配置docker-compose.yml文件 version: services: nginx: rest ...
- [ASP.NET Core 3框架揭秘] 异步线程无法使用IServiceProvider?
标题反映的是上周五一个同事咨询我的问题,我觉得这是一个很好的问题.这个问题有助于我们深入理解依赖注入框架在ASP.NET Core中的应用,以及服务实例的生命周期. 一.问题重现 我们通过一个简单的实 ...
- C# VS2019 WebService创建与发布,并部署到Windows Server 2012R
前言 上一次数据库灾备和性能优化后,数据库专家建议,在不扩容的情况下,客户端不能再频繁的扫描数据库了!一句惊醒梦中人,因为我也发现数据库越来越卡了,自从上个项目上线后,就出现了这个情况.后来分析其原因 ...
- 完全理解JS原型指南
目录 Table of Contents generated with DocToc 目录 一.参考书籍和数据 二.原型,[[prototype]]和.prototype以及constructor 三 ...
- Flask入门学习——蓝图Blueprint
flask蓝图可以实现应用程序的模块化,即通常作用于相同的url前缀,eg:/user/id,/user/profile等类似这样,可以放在一个模块当中,这样会让应用更加清晰便于开发与维护. 这里有个 ...
- 【开发工具 - Git】之本地项目托管到远程仓库
这里所说的“本地项目托管到远程仓库”,说的是:例如,我们在本地有一个写了很长时间的项目,现在想要托管到GitHub或码云上进行版本控制. 这个过程大致需要以下几个步骤: (1)在本地初始化Git项目本 ...
- CCNA 之 七 路由协议 三 OSPF
OSPF协议 OSPF开放式最短路径优先 全称:Open Shortest Path First 是目前使用最为广泛的路由协议,主要因为OSPF是开放式协议,和IGRP.EIGRP思科的私有协议不同. ...
- 基于ManagedDataAccess开发的OracleDBHelpe工具集伸手党的福音
在使用前先加入ManagedDataAccessDLL文件方可使用 添加方法:右键项目.点击管理NuGet程序包,点击浏览,在输入框内输入ManagedDataAccess,再点击安装即可 Oracl ...
- 复习sed实例操作
第6周复习课(5月2日) 课程内容: 复习 扩展1.打印某行到某行之间的内容http://ask.apelearn.com/question/5592.sed转换大小写 http://ask.apel ...