使用IConfigurationSectionHandler在web.config中增加自定义配置

本文介绍如何使用IConfigurationSectionHandler在ASP.NET应用中增加自定义配置节点,包括定义配置节点对应的类、实现接口、配置web.config文件及使用XML反序列化。

VS2008、ASP.NET 3.5

一. 场景
这里仅举一个简单应用的例子,我希望在web.config里面增加网站的基本信息,如:网站名称,网站版本号,是否将网站暂时关闭等。
二. 基本实现方法
1. 定义配置节点对应的类:SiteSetting

代码片段:

namespace Tristan.SeeCustomConfig {
publicclassSiteSetting{
publicstringSiteName{get;set;}
publicstringSiteVersion{get;set;}
publicboolClosed{get;set;}
}

}


2. 实现IConfigurationSectionHandler接口:SiteSettingHandler

Code
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->namespaceTristan.SeeCustomConfig{
publicclassSiteSettingHandler:IConfigurationSectionHandler{
IConfigurationSectionHandlerMembers#regionIConfigurationSectionHandlerMembers

publicobjectCreate(objectparent,objectconfigContext,System.Xml.XmlNodesection){
stringsiteName=section.SelectSingleNode("siteName").InnerText;
stringsiteVersiton=section.SelectSingleNode("siteVersion").InnerText;
boolclosed=Convert.ToBoolean(section.SelectSingleNode("closed").InnerText);
returnnewSiteSetting(){SiteName=siteName,SiteVersion=siteVersiton};
}


#endregion

}

}

3. 在web.config中进行配置
在<configSections></configSections>里面增加一个节点:

< sectionname = " siteSetting " type = " Tristan.SeeCustomConfig.SiteSettingHandler " />

name:指定我们将要增加的节点名为"siteSetting",接下来会使用它来编写配置节点
type:指定处理这个配置节点的handler,这个类,我们在前面已经把代码实现了
然后在<configuration><configuration>里面增加一段xml:

< siteSetting >
< siteName > 遇见未来 </ siteName >
< siteVersion > 1.0 </ siteVersion >
< closed > false </ closed >
</ siteSetting >


4. 看看效果吧
随便建一个页面在后台代码里写几行代码做个测试:

namespace Tristan.SeeCustomConfig {
publicpartialclass_Default:System.Web.UI.Page{
protectedvoidPage_Load(objectsender,EventArgse){
SiteSettingsite
=ConfigurationManager.GetSection("siteSetting")asSiteSetting;
Response.Write(site.SiteName
+","+site.SiteVersion+","+site.Closed.ToString());
}

}

}

运行,可以看到,我们在web.config中的信息被write出来了。 :)
三. 使用XML反序列化
1. 修改SiteSetting

namespace Tristan.SeeCustomConfig {

[Serializable]
[XmlRoot(
"siteSetting")]
publicclassSiteSetting{
[XmlElement(
"siteName",typeof(string))]
publicstringSiteName{get;set;}

[XmlElement(
"siteVersion",typeof(string))]
publicstringSiteVersion{get;set;}

[XmlElement(
"closed",typeof(Boolean))]
publicboolClosed{get;set;}
}

}


2. 修改SiteSettingHandler

Code
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->namespaceTristan.SeeCustomConfig{
publicclassSiteSettingHandler:IConfigurationSectionHandler{
IConfigurationSectionHandlerMembers#regionIConfigurationSectionHandlerMembers

publicobjectCreate(objectparent,objectconfigContext,System.Xml.XmlNodesection){
//stringsiteName=section.SelectSingleNode("siteName").InnerText;
//stringsiteVersiton=section.SelectSingleNode("siteVersion").InnerText;
//boolclosed=Convert.ToBoolean(section.SelectSingleNode("closed").InnerText);
//returnnewSiteSetting(){SiteName=siteName,SiteVersion=siteVersiton};

stringtypeName=((XmlElement)section).GetAttribute("type");
XmlSerializerxz
=newXmlSerializer(Type.GetType(typeName));
using(StringReadersr=newStringReader(section.OuterXml)){
returnxz.Deserialize(sr);
}

}


#endregion

}

}


3. 修改web.config中的配置

< siteSettingtype = " Tristan.SeeCustomConfig.SiteSetting " >
< siteName > 遇见未来 </ siteName >
< siteVersion > 1.0 </ siteVersion >
< closed > false </ closed >
</ siteSetting >


4. 再来看看
不修改测试代码,得到了一样的效果 :)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值