当前位置:
首页 > Python基础教程 >
-
关于ConfigurationSection自定义config的简单使用
1.1、自定义config结构(参考对应颜色标注),放到configuration根节点下:
<test> <testInfos> <testInfo aa="aaKeyStr1" bb="111111" /> <testInfo aa="aaKeyStr2" bb="222222" /> </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/
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式