一. 場景
這裏僅舉一個簡單應用的例子,我但願在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; }
}
}web
2. 實現IConfigurationSectionHandler接口:SiteSettingHandler
測試
namespace Tristan.SeeCustomConfig {
public class SiteSettingHandler : IConfigurationSectionHandler {
#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 };
}spa
#endregion
}
}xml
3. 在web.config中進行配置
在<configSections></configSections>裏面增長一個節點:
<section name="siteSetting" type="Tristan.SeeCustomConfig.SiteSettingHandler"/>接口
name:指定咱們將要增長的節點名爲"siteSetting",接下來會使用它來編寫配置節點
type:指定處理這個配置節點的handler,這個類,咱們在前面已經把代碼實現了
而後在<configuration><configuration>裏面增長一段xml:
<siteSetting>
<siteName>碰見將來</siteName>
<siteVersion>1.0</siteVersion>
<closed>false</closed>
</siteSetting>get
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());
}
}
}string
運行,能夠看到,咱們在web.config中的信息被write出來了。 :)
三. 使用XML反序列化
1. 修改SiteSetting
namespace Tristan.SeeCustomConfig {it
[Serializable]
[XmlRoot("siteSetting")]
public class SiteSetting {
[XmlElement("siteName",typeof(string))]
public string SiteName { get; set; }io
[XmlElement("siteVersion",typeof(string))]
public string SiteVersion { get; set; }
[XmlElement("closed",typeof(Boolean))]
public bool Closed { get; set; }
}
}
2. 修改SiteSettingHandler
namespace Tristan.SeeCustomConfig {
public class SiteSettingHandler : IConfigurationSectionHandler {
#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 };
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中的配置
<siteSetting type="Tristan.SeeCustomConfig.SiteSetting">
<siteName>碰見將來</siteName>
<siteVersion>1.0</siteVersion>
<closed>false</closed>
</siteSetting>
4. 再來看看 不修改測試代碼,獲得了同樣的效果 :)