通过ConfigurationSection来轻松地加载配置文件
最近写了一段自定义的ConfigurationSection继承类,通过该class可以轻松得定义和读取配置文件信息,
注意这里使用的是c# 2.0来实现的,相比1.1必须通过实现IConfigurationSectionHandler接口来自定义配置节点类方便多了
不论是web.config还是app.config,都可以使用ConfigurationManager类加载配置文件中自定义的节点内容。
以下是配置文件的层次结构:
注意order和lineItem节点都是允许重复出现的
以下是继承自ConfigurationSection的自定义配置节点类:
注意这里使用的是c# 2.0来实现的,相比1.1必须通过实现IConfigurationSectionHandler接口来自定义配置节点类方便多了
不论是web.config还是app.config,都可以使用ConfigurationManager类加载配置文件中自定义的节点内容。
以下是配置文件的层次结构:
1<?xml version="1.0" encoding="utf-8" ?>
2<configuration>
3 <configSections>
4 <section name="orders" type="ConsoleTest.OrdersSection, ConsoleTest"/>
5 </configSections>
6 <orders companyID="2001">
7 <order number="100001" amount="222.22">
8 <lineItems warehouseNumber="02">
9 <lineItem number="00-000-001" description="wii"/>
10 </lineItems>
11 </order>
12 <order number="300001" amount="33.33">
13 <lineItems warehouseNumber="99">
14 <lineItem number="00-000-001" description="xbox 360"/>
15 <lineItem number="00-000-003" description="playstation 3"/>
16 </lineItems>
17 </order>
18 </orders>
19</configuration>
2<configuration>
3 <configSections>
4 <section name="orders" type="ConsoleTest.OrdersSection, ConsoleTest"/>
5 </configSections>
6 <orders companyID="2001">
7 <order number="100001" amount="222.22">
8 <lineItems warehouseNumber="02">
9 <lineItem number="00-000-001" description="wii"/>
10 </lineItems>
11 </order>
12 <order number="300001" amount="33.33">
13 <lineItems warehouseNumber="99">
14 <lineItem number="00-000-001" description="xbox 360"/>
15 <lineItem number="00-000-003" description="playstation 3"/>
16 </lineItems>
17 </order>
18 </orders>
19</configuration>
注意order和lineItem节点都是允许重复出现的
以下是继承自ConfigurationSection的自定义配置节点类:
1public class OrdersSection : ConfigurationSection
2 {
3 [ConfigurationProperty("companyID", IsRequired = true)]
4 public string CompanyID
5 {
6 get
7 {
8 return (string)base["companyID"];
9 }
10 set
11 {
12 base["companyID"] = value;
13 }
14 }
15
16 [ConfigurationProperty("", IsDefaultCollection = true)]
17 public OrderElementCollection Orders
18 {
19 get
20 {
21 return (OrderElementCollection)base[""];
22 }
23 }
24 }
25
26 public class OrderElementCollection : ConfigurationElementCollection
27 {
28 protected override ConfigurationElement CreateNewElement()
29 {
30 return new OrderElement();
31 }
32 protected override object GetElementKey(ConfigurationElement element)
33 {
34 return ((OrderElement)element).Number;
35 }
36
37 public override ConfigurationElementCollectionType CollectionType
38 {
39 get
40 {
41 return ConfigurationElementCollectionType.BasicMap;
42 }
43 }
44 protected override string ElementName
45 {
46 get
47 {
48 return "order";
49 }
50 }
51
52 public OrderElement this[int index]
53 {
54 get
55 {
56 return (OrderElement)BaseGet(index);
57 }
58 set
59 {
60 if (BaseGet(index) != null)
61 {
62 BaseRemoveAt(index);
63 }
64 BaseAdd(index, value);
65 }
66 }
67 }
68
69 public class OrderElement : ConfigurationElement
70 {
71 [ConfigurationProperty("number", IsRequired = true)]
72 public string Number
73 {
74 get
75 {
76 return (string)base["number"];
77 }
78 set
79 {
80 base["number"] = value;
81 }
82 }
83
84 [ConfigurationProperty("amount", IsRequired = true)]
85 public double Amount
86 {
87 get
88 {
89 return (double)base["amount"];
90 }
91 set
92 {
93 base["amount"] = value;
94 }
95 }
96
97 [ConfigurationProperty("lineItems", IsDefaultCollection = true)]
98 public LineItemElementCollection LineItems
99 {
100 get
101 {
102 return (LineItemElementCollection)base["lineItems"];
103 }
104 }
105 }
106
107 public class LineItemElementCollection : ConfigurationElementCollection
108 {
109 [ConfigurationProperty("warehouseNumber", IsRequired = true)]
110 public string WarehouseNumber
111 {
112 get
113 {
114 return (string)base["warehouseNumber"];
115 }
116 set
117 {
118 base["warehouseNumber"] = value;
119 }
120 }
121
122 protected override ConfigurationElement CreateNewElement()
123 {
124 return new LineItemElement();
125 }
126 protected override object GetElementKey(ConfigurationElement element)
127 {
128 return ( (LineItemElement)element ).Number;
129 }
130
131 public override ConfigurationElementCollectionType CollectionType
132 {
133 get
134 {
135 return ConfigurationElementCollectionType.BasicMap;
136 }
137 }
138 protected override string ElementName
139 {
140 get
141 {
142 return "lineItem";
143 }
144 }
145
146 public LineItemElement this[int index]
147 {
148 get
149 {
150 return (LineItemElement)BaseGet(index);
151 }
152 set
153 {
154 if (BaseGet(index) != null)
155 {
156 BaseRemoveAt(index);
157 }
158 BaseAdd(index, value);
159 }
160 }
161 }
162
163 public class LineItemElement : ConfigurationElement
164 {
165 [ConfigurationProperty("number", IsKey=true, IsRequired = true)]
166 public string Number
167 {
168 get
169 {
170 return (string)base["number"];
171 }
172 set
173 {
174 base["number"] = value;
175 }
176 }
177
178 [ConfigurationProperty("description", IsRequired = true)]
179 public string Description
180 {
181 get
182 {
183 return (string)base["description"];
184 }
185 set
186 {
187 base["description"] = value;
188 }
189 }
190 }
2 {
3 [ConfigurationProperty("companyID", IsRequired = true)]
4 public string CompanyID
5 {
6 get
7 {
8 return (string)base["companyID"];
9 }
10 set
11 {
12 base["companyID"] = value;
13 }
14 }
15
16 [ConfigurationProperty("", IsDefaultCollection = true)]
17 public OrderElementCollection Orders
18 {
19 get
20 {
21 return (OrderElementCollection)base[""];
22 }
23 }
24 }
25
26 public class OrderElementCollection : ConfigurationElementCollection
27 {
28 protected override ConfigurationElement CreateNewElement()
29 {
30 return new OrderElement();
31 }
32 protected override object GetElementKey(ConfigurationElement element)
33 {
34 return ((OrderElement)element).Number;
35 }
36
37 public override ConfigurationElementCollectionType CollectionType
38 {
39 get
40 {
41 return ConfigurationElementCollectionType.BasicMap;
42 }
43 }
44 protected override string ElementName
45 {
46 get
47 {
48 return "order";
49 }
50 }
51
52 public OrderElement this[int index]
53 {
54 get
55 {
56 return (OrderElement)BaseGet(index);
57 }
58 set
59 {
60 if (BaseGet(index) != null)
61 {
62 BaseRemoveAt(index);
63 }
64 BaseAdd(index, value);
65 }
66 }
67 }
68
69 public class OrderElement : ConfigurationElement
70 {
71 [ConfigurationProperty("number", IsRequired = true)]
72 public string Number
73 {
74 get
75 {
76 return (string)base["number"];
77 }
78 set
79 {
80 base["number"] = value;
81 }
82 }
83
84 [ConfigurationProperty("amount", IsRequired = true)]
85 public double Amount
86 {
87 get
88 {
89 return (double)base["amount"];
90 }
91 set
92 {
93 base["amount"] = value;
94 }
95 }
96
97 [ConfigurationProperty("lineItems", IsDefaultCollection = true)]
98 public LineItemElementCollection LineItems
99 {
100 get
101 {
102 return (LineItemElementCollection)base["lineItems"];
103 }
104 }
105 }
106
107 public class LineItemElementCollection : ConfigurationElementCollection
108 {
109 [ConfigurationProperty("warehouseNumber", IsRequired = true)]
110 public string WarehouseNumber
111 {
112 get
113 {
114 return (string)base["warehouseNumber"];
115 }
116 set
117 {
118 base["warehouseNumber"] = value;
119 }
120 }
121
122 protected override ConfigurationElement CreateNewElement()
123 {
124 return new LineItemElement();
125 }
126 protected override object GetElementKey(ConfigurationElement element)
127 {
128 return ( (LineItemElement)element ).Number;
129 }
130
131 public override ConfigurationElementCollectionType CollectionType
132 {
133 get
134 {
135 return ConfigurationElementCollectionType.BasicMap;
136 }
137 }
138 protected override string ElementName
139 {
140 get
141 {
142 return "lineItem";
143 }
144 }
145
146 public LineItemElement this[int index]
147 {
148 get
149 {
150 return (LineItemElement)BaseGet(index);
151 }
152 set
153 {
154 if (BaseGet(index) != null)
155 {
156 BaseRemoveAt(index);
157 }
158 BaseAdd(index, value);
159 }
160 }
161 }
162
163 public class LineItemElement : ConfigurationElement
164 {
165 [ConfigurationProperty("number", IsKey=true, IsRequired = true)]
166 public string Number
167 {
168 get
169 {
170 return (string)base["number"];
171 }
172 set
173 {
174 base["number"] = value;
175 }
176 }
177
178 [ConfigurationProperty("description", IsRequired = true)]
179 public string Description
180 {
181 get
182 {
183 return (string)base["description"];
184 }
185 set
186 {
187 base["description"] = value;
188 }
189 }
190 }