使用IConfigurationSectionHandler在web.config中增長自定義配置

一. 場景
    這裏僅舉一個簡單應用的例子,我但願在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. 再來看看    不修改測試代碼,獲得了同樣的效果 :)

相關文章
相關標籤/搜索