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
<!--<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
<!--<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. 再来看看
不修改测试代码,得到了一样的效果 :)
本文介绍如何使用IConfigurationSectionHandler在ASP.NET应用中增加自定义配置节点,包括定义配置节点对应的类、实现接口、配置web.config文件及使用XML反序列化。
355

被折叠的 条评论
为什么被折叠?



