当前位置:首页 > 网络编程 > WEB编程 > ASP.net >  通过继承ConfigurationSection,在web.config中增加自定义配置

 通过继承ConfigurationSection,在web.config中增加自定义配置

点击次数:34 次 发布日期:2008-11-26 22:30:11 作者:源代码网
源代码网推荐      VS2008、C#
源代码网推荐  
源代码网推荐  前几天写了一篇使用IConfigurationSectionHandler在web.config中增加自定义配置,然后看到有回复说IConfigurationSectionHandler在2.0时代被弃用了,推荐使用ConfigurationSection,不敢怠慢,赶紧看看ConfigurationSecion是如何使用的。
源代码网推荐  
源代码网推荐  1. 实现目的
源代码网推荐   我希望在web.config中,配置网站信息,管理员信息,和用户信息(当然这个配置有点不切实际了,这里只是为了演示),所以,我希望按下面的格式做配置。
源代码网推荐  <siteSetting siteName="遇见未来" siteVersion="1.0" closed="false">
源代码网推荐   <siteAdmin adminId="1" adminName="guozhijian"/>
源代码网推荐   <siteUsers>
源代码网推荐   <siteUser userId="1" userName="zhanglanzhen"/>
源代码网推荐   <siteUser userId="2" userName="wdy"/>
源代码网推荐   </siteUsers>
源代码网推荐   </siteSetting> 这个siteSetting配置节点是一个稍微复杂一点的配置,自己包含有Attributes,同时包含子节点siteAdmin, siteUsers, 而siteUsers又包含多个siteUser子节点。
源代码网推荐   接下来我要定义几个类,分别代表各个不同的节点。有一定的规则:
源代码网推荐   代表根节点,也就是siteSetting节点的类,继承自ConfigurationSection类
源代码网推荐   代表单一子节点的siteAdmin, siteUser类,继承自ConfigurationElement类
源代码网推荐   包含多个同名子节点的siteUsers类,继承自ConfigurationElementCollection类
源代码网推荐  2. SiteAdmin类
源代码网推荐   public class SiteAdmin : ConfigurationElement
源代码网推荐   {
源代码网推荐   [ConfigurationProperty("adminId", IsRequired=true)]
源代码网推荐   public int AdminId {
源代码网推荐   get { return Convert.ToInt32(this["adminId"]); }
源代码网推荐   set { this["adminId"] = value; }
源代码网推荐   }
源代码网推荐   [ConfigurationProperty("adminName")]
源代码网推荐   public string AdminName {
源代码网推荐   get { return this["adminName"] as string; }
源代码网推荐   set { this["adminName"] = value; }
源代码网推荐   }
源代码网推荐   } 注意ConfigurationPropertyAttribute,和this关键字,很明显在基类中定义了索引器。本文并不想对这些做过多探讨,直接以代码展示。
源代码网推荐  3. SiteUser类
源代码网推荐   public class SiteUser : ConfigurationElement {
源代码网推荐  
源代码网推荐   [ConfigurationProperty("userId",IsRequired=true)]
源代码网推荐   public int UserId {
源代码网推荐   get { return Convert.ToInt32(this["userId"]); }
源代码网推荐   set { this["userId"] = value; }
源代码网推荐   }
源代码网推荐   [ConfigurationProperty("userName")]
源代码网推荐   public string UserName {
源代码网推荐   get { return this["userName"] as string; }
源代码网推荐   set { this["userName"] = value; }
源代码网推荐   }
源代码网推荐   }
源代码网推荐  4. SiteUsers类
源代码网推荐  public class SiteUsers : ConfigurationElementCollection {
源代码网推荐  
源代码网推荐   protected override ConfigurationElement CreateNewElement() {
源代码网推荐   return new SiteUser();
源代码网推荐   }
源代码网推荐  
源代码网推荐   protected override object GetElementKey(ConfigurationElement element) {
源代码网推荐   SiteUser siteUser = element as SiteUser;
源代码网推荐   return siteUser.UserId;
源代码网推荐   }
源代码网推荐  
源代码网推荐   public override ConfigurationElementCollectionType CollectionType {
源代码网推荐   get {
源代码网推荐   return ConfigurationElementCollectionType.BasicMap;
源代码网推荐   }
源代码网推荐   }
源代码网推荐   protected override string ElementName {
源代码网推荐   get {
源代码网推荐   return "siteUser";
源代码网推荐   }
源代码网推荐   }
源代码网推荐   } 继承自ConfigurationElementCollection的类,必须override以上4个方法。
源代码网推荐   SiteUsers是SiteUser的集合,因此不难理解上述4个override方法的目的。
源代码网推荐  5. SiteSetting类
源代码网推荐  public class SiteSetting : ConfigurationSection {
源代码网推荐  
源代码网推荐   [ConfigurationProperty("siteName")]
源代码网推荐   public string SiteName {
源代码网推荐   get { return this["siteName"] as string; }
源代码网推荐   set { this["siteName"] = value; }
源代码网推荐   }
源代码网推荐   [ConfigurationProperty("siteVersion")]
源代码网推荐   public string SiteVersion {
源代码网推荐   get { return this["siteVersion"] as string; }
源代码网推荐   set { this["siteVersion"] = value; }
源代码网推荐   }
源代码网推荐   [ConfigurationProperty("closed", IsRequired=true)]
源代码网推荐   public bool Closed {
源代码网推荐   get { return (bool)this["closed"]; }
源代码网推荐   set { this["closed"] = value; }
源代码网推荐   }
源代码网推荐  
源代码网推荐   [ConfigurationProperty("siteAdmin")]
源代码网推荐   public SiteAdmin SiteAdmin {
源代码网推荐   get { return this["siteAdmin"] as SiteAdmin; }
源代码网推荐   set { this["siteAdmin"] = value; }
源代码网推荐   }
源代码网推荐   [ConfigurationProperty("siteUsers")]
源代码网推荐   public SiteUsers SiteUsers {
源代码网推荐   get { return this["siteUsers"] as SiteUsers; }
源代码网推荐   }
源代码网推荐   }
源代码网推荐  6. 在web.config添加我们的自定义配置
源代码网推荐   根据我们最初的设想,现在来对web.config进行配置
源代码网推荐   在<configSections></configSections>中加入:
源代码网推荐   <section name="siteSetting" type="Tristan.SeeCustomCfg.SiteSetting"/>
源代码网推荐   在<configuration></configuration>中加入:
源代码网推荐  <siteSetting siteName="遇见未来" siteVersion="1.0" closed="false">
源代码网推荐   <siteAdmin adminId="1" adminName="guozhijian"/>
源代码网推荐   <siteUsers>
源代码网推荐   <siteUser userId="1" userName="zhanglanzhen"/>
源代码网推荐   <siteUser userId="2" userName="wdy"/>
源代码网推荐   </siteUsers>
源代码网推荐   </siteSetting>
源代码网推荐  7. 检验结果
源代码网推荐   这样就完成了吗?是的。
源代码网推荐   来写简单的测试代码,将我们的自定义配置信息输出来:
源代码网推荐   public partial class _Default : System.Web.UI.Page {
源代码网推荐   protected void Page_Load(object sender, EventArgs e) {
源代码网推荐  
源代码网推荐   SiteSetting siteSetting = ConfigurationManager.GetSection("siteSetting") as SiteSetting;
源代码网推荐  
源代码网推荐   Response.Write(siteSetting.SiteName + "," + siteSetting.SiteVersion + "," + siteSetting.Closed.ToString());
源代码网推荐   Response.Write("<br/>");
源代码网推荐  
源代码网推荐   Response.Write(siteSetting.SiteAdmin.AdminId.ToString() + "," + siteSetting.SiteAdmin.AdminName);
源代码网推荐   Response.Write("<br/>");
源代码网推荐  
源代码网推荐   foreach (SiteUser u in siteSetting.SiteUsers) {
源代码网推荐   Response.Write(u.UserId.ToString() + "," + u.UserName);
源代码网推荐   Response.Write("<br/>");
源代码网推荐   }
源代码网推荐   }
源代码网推荐   }
源代码网推荐   测试通过:)
源代码网推荐  
源代码网推荐   再联想之前使用IConfigurationSectionHandler,我觉得比本文描写的方法更好用,为什么?因为更容易理解啊,只需实现一个接口,不像这个,要根据不同的情况分别继承那么几个类。
源代码网推荐   如果IConfigurationSectionHandler果真在2.0里不推荐使用,那么却又在3.5中恢复身份,也是可以理解的。  做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。
源代码网推荐


源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华