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 Coll |