一、原來(lái)自定配置文件的編寫(xiě)方式:
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
對(duì)象:
DisplayConfigName特性(對(duì)應(yīng)節(jié)點(diǎn)名稱)
ReadSection類(初始化節(jié)點(diǎn))
ConfigSectionsHelper類(配置解析類)
Sections類(配置集合類)
特點(diǎn):根據(jù)自定義類型讀取配置文件
注意:定義屬性為string或class類型,集合為泛型Sections類
方法:GetConfigSection<ConnConfig>();//讀取唯一節(jié)點(diǎn)類型
GetConfigSectionChild<ConnConfig>();//讀取包含子節(jié)點(diǎn)類型
1 1.自定義類型
2
3 public class ConnConfig
4 {
5 [DisplayConfigName("name")]//配置文件中名稱為name
6 public string Name { get; set; }
7 public string str{ get; set; }//如果沒(méi)有聲明特性,那么配置文件名稱為屬性名稱str
8 }
01 2.單節(jié)點(diǎn)(不含子節(jié)點(diǎn))
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 上面我們只配置了一個(gè)connstr節(jié)點(diǎn)。沒(méi)有任何子節(jié)點(diǎn)。注:此節(jié)點(diǎn)只能有一個(gè),所以不能多個(gè)connstr。
21
22 我們把這個(gè)配置讀取為ConnConfig類型。
23
24 ReadSection rs = new ReadSection("connstr");//實(shí)例化ReadSection,參數(shù)為節(jié)點(diǎn)名稱
25
26 ConnConfig conn= rs.GetConfigSection<ConnConfig>();//通過(guò)GetConfigSection讀取配置
27
28 Console.WriteLine(conn.Name);//驗(yàn)證是否讀取到
01 3、多節(jié)點(diǎn)(含子節(jié)點(diǎn))
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節(jié)點(diǎn)
29 var con = rs.GetConfigSectionChild<ConnConfig>();//GetConfigSectionChild讀取子節(jié)點(diǎn)配置,注:只要有子節(jié)點(diǎn)配置都需要用這個(gè)來(lái)讀取
30 foreach (var item in con)
31 {
32 Console.WriteLine(item.Name);
33 Console.WriteLine(item.str);
34 }
01 4、屬性為自定義類型(含多個(gè)子節(jié)點(diǎn))
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、屬性為自定義集合類型(子節(jié)點(diǎn)集合)
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、屬性為自定義多個(gè)集合類型(多子節(jié)點(diǎn)集合)
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");//讀取節(jié)點(diǎn)
8 var list = rs.GetConfigSectionChild<ConfigItem>();
組件下載:DefinitionConfig
組件Demo:ReadConfigDemo