通过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>
<?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>注意order和lineItem节点都是允许重复出现的
以下是继承自ConfigurationSection的自定义配置节点类:
1
public 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
}
public class OrdersSection : ConfigurationSection2
{3
[ConfigurationProperty("companyID", IsRequired = true)]4
public string CompanyID5
{6
get7
{8
return (string)base["companyID"];9
}10
set11
{12
base["companyID"] = value;13
}14
}15

16
[ConfigurationProperty("", IsDefaultCollection = true)]17
public OrderElementCollection Orders18
{19
get20
{21
return (OrderElementCollection)base[""];22
}23
}24
}25

26
public class OrderElementCollection : ConfigurationElementCollection27
{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 CollectionType38
{39
get40
{41
return ConfigurationElementCollectionType.BasicMap;42
}43
}44
protected override string ElementName45
{46
get47
{48
return "order";49
}50
}51

52
public OrderElement this[int index]53
{54
get55
{56
return (OrderElement)BaseGet(index);57
}58
set59
{60
if (BaseGet(index) != null)61
{62
BaseRemoveAt(index);63
}64
BaseAdd(index, value);65
}66
}67
}68

69
public class OrderElement : ConfigurationElement70
{71
[ConfigurationProperty("number", IsRequired = true)]72
public string Number73
{74
get75
{76
return (string)base["number"];77
}78
set79
{80
base["number"] = value;81
}82
}83

84
[ConfigurationProperty("amount", IsRequired = true)]85
public double Amount86
{87
get88
{89
return (double)base["amount"];90
}91
set92
{93
base["amount"] = value;94
}95
}96

97
[ConfigurationProperty("lineItems", IsDefaultCollection = true)]98
public LineItemElementCollection LineItems99
{100
get101
{102
return (LineItemElementCollection)base["lineItems"];103
}104
}105
}106

107
public class LineItemElementCollection : ConfigurationElementCollection108
{109
[ConfigurationProperty("warehouseNumber", IsRequired = true)]110
public string WarehouseNumber111
{112
get113
{114
return (string)base["warehouseNumber"];115
}116
set117
{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 CollectionType132
{133
get134
{135
return ConfigurationElementCollectionType.BasicMap;136
}137
}138
protected override string ElementName139
{140
get141
{142
return "lineItem";143
}144
}145

146
public LineItemElement this[int index]147
{148
get149
{150
return (LineItemElement)BaseGet(index);151
}152
set153
{154
if (BaseGet(index) != null)155
{156
BaseRemoveAt(index);157
}158
BaseAdd(index, value);159
}160
}161
}162

163
public class LineItemElement : ConfigurationElement164
{165
[ConfigurationProperty("number", IsKey=true, IsRequired = true)]166
public string Number167
{168
get169
{170
return (string)base["number"];171
}172
set173
{174
base["number"] = value;175
}176
}177

178
[ConfigurationProperty("description", IsRequired = true)]179
public string Description180
{181
get182
{183
return (string)base["description"];184
}185
set186
{187
base["description"] = value;188
}189
}190
}

浙公网安备 33010602011771号