一、原来自定配置文件的编写方式:
01 1、定义类型比较繁琐
02
03 internal class AOPConfigurationSection : ConfigurationSection
04 {
05 [ConfigurationProperty("", IsDefaultCollection = true)]
06 public AopElementCollection Aops //需要定义这里略
07 {
08 get
09 {
10 return (AopElementCollection)base[""];
11 }
12 }
13 }
1 2、LINQ TO XML查询
2
3 XElement xelement = XElement.Parse(xml);
4 var name = from e in xelement.Elements("b")
5 let s = e.Element("e")
6 select s.Attribute("name").Value;
二、通用配置组件介绍
引用:DefinitionConfig.dll
对象:
DisplayConfigName特性(对应节点名称)
ReadSection类(初始化节点)
ConfigSectionsHelper类(配置解析类)
Sections类(配置集合类)
特点:根据自定义类型读取配置文件
注意:定义属性为string或class类型,集合为泛型Sections类
方法:GetConfigSection<ConnConfig>();//读取唯一节点类型
GetConfigSectionChild<ConnConfig>();//读取包含子节点类型
1 1.自定义类型
2
3 public class ConnConfig
4 {
5 [DisplayConfigName("name")]//配置文件中名称为name
6 public string Name { get; set; }
7 public string str{ get; set; }//如果没有声明特性,那么配置文件名称为属性名称str
8 }
01 2.单节点(不含子节点)
02
03 //这里section 中type属性为DefinitionConfig.ConfigSectionsHelper,DefinitionConfig
04
05 <configSections>
06 <section name="connstr" type="DefinitionConfig.ConfigSectionsHelper,DefinitionConfig"/>
07
08 </configSections>
09
10 <connstr name="db" str="connstring"></connstr>
11
12 或
13
14 <connstr str="connstring">
15 <name>db</name>
16
17 <str>connstring</str>
18 </connstr>
19
20 上面我们只配置了一个connstr节点。没有任何子节点。注:此节点只能有一个,所以不能多个connstr。
21
22 我们把这个配置读取为ConnConfig类型。
23
24 ReadSection rs = new ReadSection("connstr");//实例化ReadSection,参数为节点名称
25
26 ConnConfig conn= rs.GetConfigSection<ConnConfig>();//通过GetConfigSection读取配置
27
28 Console.WriteLine(conn.Name);//验证是否读取到
01 3、多节点(含子节点)
02
03 <configSections>
04 <section name="connstrs" type="DefinitionConfig.ConfigSectionsHelper,DefinitionConfig"/>
05
06 </configSections>
07
08 <connstrs>
09
10 <conn name=”sql” str=”connstring”></conn>
11
12 <conn name=”mysql”>
13
14 <str>connstring</str>
15
16 </conn>
17
18 <conn>
19
20 <name>sqlite</name>
21
22 <str>connstring</str>
23
24 </conn>
25
26 </connstrs>
27
28 ReadSection rs = new ReadSection("connstrs");//读取connstrs节点
29 var con = rs.GetConfigSectionChild<ConnConfig>();//GetConfigSectionChild读取子节点配置,注:只要有子节点配置都需要用这个来读取
30 foreach (var item in con)
31 {
32 Console.WriteLine(item.Name);
33 Console.WriteLine(item.str);
34 }
01 4、属性为自定义类型(含多个子节点)
02
03 public class ConnConfig
04 {
05 [DisplayConfigName("name")]
06 public string Name { get; set; }
07 public ConnString str { get; set; }//定义为类型
08 }
09
10 public class ConnString {
11 public string name { get; set; }
12 public string type { get; set; }
13 }
14
15 <connstrs>
16 <con>
17 <name>oracle</name>
18 <str name="oracledb">
19 <type>oracle10</type>
20 </str>
21 </con>
22
23 </connstrs>
24
25 ReadSection rs = new ReadSection("connstrs");
26 var con = rs.GetConfigSectionChild<ConnConfig>();
27 Console.WriteLine(con[0].str.name);//oracledb
01 5、属性为自定义集合类型(子节点集合)
02
03 public class ConnConfig
04 {
05 [DisplayConfigName("name")]
06 public string Name { get; set; }
07 public ConnString str { get; set; }
08 public Sections<AA> aa { get; set; }//定义集合
09 }
10
11 public class ConnString {
12 public string name { get; set; }
13 public string type { get; set; }
14 }
15
16 public class AA{
17 public string name{get;set;}
18 }
19
20 <connstrs>
21 <con>
22 <name>oracle</name>
23 <str name="oracledb">
24 <type>oracle10</type>
25 </str>
26 <aa name="1"></aa>
27 <aa>
28 <name>2</name>
29 </aa>
30 </con>
31
32 </connstrs>
33
34 ReadSection rs = new ReadSection("connstrs");
35 var con = rs.GetConfigSectionChild<ConnConfig>();
36 foreach (var item in con[0].aa)
37 {
38 Console.WriteLine(item.name);
39 }
01 6、属性为自定义多个集合类型(多子节点集合)
02
03 public class ConnConfig
04 {
05 [DisplayConfigName("name")]
06 public string Name { get; set; }
07 public ConnString str { get; set; }
08 public Sections<AA> aa { get; set; }
09 }
10
11 public class ConnString {
12 public string name { get; set; }
13 public string type { get; set; }
14 }
15
16 public class AA
17 {
18 public string name { get; set; }
19 public Sections<BB> bb { get; set; }
20 }
21
22 public class BB
23 {
24 public string type { get; set; }
25 }
26
27 <connstrs>
28 <con>
29 <name>oracle</name>
30 <str name="oracledb">
31 <type>oracle10</type>
32 </str>
33 <aa name="1">
34 <bb type="type1"></bb>
35 </aa>
36 <aa>
37 <name>2</name>
38 <bb type="type2"></bb>
39 </aa>
40 </con>
41
42 </connstrs>
43
44 ReadSection rs = new ReadSection("connstrs");
45 var con = rs.GetConfigSectionChild<ConnConfig>();
46 foreach (var item in con[0].aa)
47 {
48 Console.WriteLine(item.name);
49 }
1 7、配置外部config
2
3 <section name="mySection" type="DefinitionConfig.ConfigSectionsHelper,DefinitionConfig" requirePermission="false" restartOnExternalChanges="false"/>
4
5 <mySection configSource="mySection.config"/>
6
7 ReadSection rs = new ReadSection("mySection");//读取节点
8 var list = rs.GetConfigSectionChild<ConfigItem>();
组件下载:DefinitionConfig
组件Demo:ReadConfigDemo