关于ConfigurationSection自定义config的简单使用
程序员文章站
2022-05-03 12:48:56
1.1、自定义config结构(参考对应颜色标注),放到configuration根节点下:
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/
如有错误,请指正,谢谢!
推荐阅读
-
关于ConfigurationSection自定义config的简单使用
-
关于MySql使用EFCore CodeFirst 自定义RowVersion并发字段的解决办法
-
Winform中使用FastReport实现简单的自定义PDF导出
-
关于使用iframe的父子页面进行简单的相互传值
-
关于MySQL的存储函数(自定义函数)的定义和使用方法详解
-
Yii1.1框架关于日志的配置的简单使用
-
关于bootstrap日期转化,bootstrap-editable的简单使用,bootstrap-fileinput的使用详解
-
关于@RequestParam注解的使用(简单易懂)
-
自定义view的简单使用
-
Java中关于二维数组简单的定义与使用详解