【转载】通过ConfigurationSection来轻松地加载配置文件
2010-05-06 11:37 Virus-BeautyCode 阅读(1177) 评论(0) 收藏 举报原文地址:通过ConfigurationSection来轻松地加载配置文件
最近写了一段自定义的ConfigurationSection继承类,通过该class可以轻松得定义和读取配置文件信息,
注意这里使用的是c# 2.0来实现的,相比1.1必须通过实现IConfigurationSectionHandler接口来自定义配置节点类方便多了
不论是web.config还是app.config,都可以使用ConfigurationManager类加载配置文件中自定义的节点内容。
以下是配置文件的层次结构:
<?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的自定义配置节点类:
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
}
原文地址:使用 ConfigurationSection 创建自定义配置节
我们可以通过用自己的 XML 配置元素来扩展标准的 ASP.NET 配置设置集,要完成这一功能,我们必须实现继承System.Configuration.ConfigurationSection 类来实现自定义配置节,在1.0中当然也可以通过IconfigurationSectionHandler 接口创建自定义配置节!这里我们主要学一下通过ConfigurationSection类来实现简单的配置处理程序.
先看一下在web.config文件中的配置情况,在这里有两个元素,第一个mysection,有两个属性user,password,第二个也有两个属性element1,和element2。配置比较简单。
<!--//////////////////////////////////////////////////////////////////////////////////////////////-->
<configSections>
<sectionGroup name="mygroup">
<section name="mysection"
type="ConfigSection"
allowDefinition="Everywhere"
allowLocation="true"/>
</sectionGroup>
</configSections>
<!--//////////////////////////////////////////////////////////////////////////////////////////////-->
<mygroup>
<mysection user="用户" password="密码">
<element element1="属性1" element2="属性2"></element>
</mysection>
</mygroup>
理解配置文件结构后,我们就需要用继承自System.Configuration.ConfigurationSection的基类来实现简单的配置类ConfigSection,在2.0中,我们只需要这一个类就能实现完成配置,下面请看代码:
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
/// <summary>
/// ConfigSection 的摘要说明
/// </summary>
public class ConfigSection:ConfigurationSection
{
public ConfigSection()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
[ConfigurationProperty("user",DefaultValue="yanghong",IsRequired=true)]
public string User
{
get { return (string)this["user"]; }
set { this["user"] = value; }
}
[ConfigurationProperty("password",DefaultValue="password",IsRequired=true)]
public string PassWord
{
get { return (string)this["password"]; }
set { this["password"] = value; }
}
[ConfigurationProperty("element")]
public elementinfo Element
{
get { return (elementinfo)this["element"]; }
set {this["element"] = value; }
}
}
public class elementinfo : ConfigurationElement
{
public elementinfo() { }
[ConfigurationProperty("element1", DefaultValue = "element1", IsRequired = true)]
public string Element1
{
get { return (string)this["element1"]; }
}
[ConfigurationProperty("element2",DefaultValue="element2",IsRequired=true)]
public string Element2
{
get { return (string)this["element2"]; }
}
}
通过下面的代码就可以获得在配置文件中设置的值了
ConfigSection config = (ConfigSection)ConfigurationManager.GetSection("mygroup/mysection");
Response.Write("用户名:"+config.User.ToString() + "密码:" + config.PassWord.ToString() + "元素属性:" + config.Element.Element1.ToString() + config.Element.Element2.ToString());

浙公网安备 33010602011771号