Go homepage(回首页) Upload pictures (上传图片) Write articles (发文字帖)
The author:(作者)归海一刀published in(发表于) 2014/1/30 1:07:50 使用IConfigurationSectionHandler在web.config中增加自定义配置_[Asp.Net教程]
VS2008、ASP.NET 3.5
一. 场景 这里仅举一个简单应用的例子,我希望在web.config里面增加网站的基本信息,如:网站名称,网站版本号,是否将网站暂时关闭等。二. 基本实现方法1. 定义配置节点对应的类:SiteSetting 代码片段:
namespace Tristan.SeeCustomConfig { public class SiteSetting { public string SiteName { get; set; } public string SiteVersion { get; set; } public bool Closed { get; set; } }}
2. 实现IConfigurationSectionHandler接口:SiteSettingHandler
Codenamespace Tristan.SeeCustomConfig { public class SiteSettingHandler : IConfigurationSectionHandler { IConfigurationSectionHandler Members#region IConfigurationSectionHandler Members
public object Create(object parent, object configContext, System.Xml.XmlNode section) { string siteName = section.SelectSingleNode("siteName").InnerText; string siteVersiton = section.SelectSingleNode("siteVersion").InnerText; bool closed = Convert.ToBoolean(section.SelectSingleNode("closed").InnerText); return new SiteSetting() { SiteName = siteName, SiteVersion = siteVersiton }; }
#endregion }}3. 在web.config中进行配置 在里面增加一个节点:
name:指定我们将要增加的节点名为"siteSetting",接下来会使用它来编写配置节点 type:指定处理这个配置节点的handler,这个类,我们在前面已经把代码实现了 然后在里面增加一段xml:
遇见未来 1.0 false
4. 看看效果吧 随便建一个页面在后台代码里写几行代码做个测试:
namespace Tristan.SeeCustomConfig { public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { SiteSetting site = ConfigurationManager.GetSection("siteSetting") as SiteSetting; Response.Write(site.SiteName + "," + site.SiteVersion + "," + site.Closed.ToString()); } }} 运行,可以看到,我们在web.config中的信息被write出来了。 :)三. 使用XML反序列化1. 修改SiteSetting
namespace Tristan.SeeCustomConfig {
[Serializable] [XmlRoot("siteSetting")] public class SiteSetting { [XmlElement("siteName",typeof(string))] public string SiteName { get; set; }
[XmlElement("siteVersion",typeof(string))] public string SiteVersion { get; set; }
[XmlElement("closed",typeof(Boolean))] public bool Closed { get; set; } }}
2. 修改SiteSettingHandler
public object Create(object parent, object configContext, System.Xml.XmlNode section) { //string siteName = section.SelectSingleNode("siteName").InnerText; //string siteVersiton = section.SelectSingleNode("siteVersion").InnerText; //bool closed = Convert.ToBoolean(section.SelectSingleNode("closed").InnerText); //return new SiteSetting() { SiteName = siteName, SiteVersion = siteVersiton };
string typeName = ((XmlElement)section).GetAttribute("type"); XmlSerializer xz = new XmlSerializer(Type.GetType(typeName)); using (StringReader sr = new StringReader(section.OuterXml)) { return xz.Deserialize(sr); } }
#endregion }}
3. 修改web.config中的配置
4. 再来看看 不修改测试代码,得到了一样的效果 :)
来源:http://www.cnblogs.com/guozhijian
赞