对于.Net中的自定义节点,如果要单独处理,就要为这个节点添加一个指定的类,如果我们在一个应用程序中,定义了很多个自定义节点的话,还按照这样做,就会多出很多个处理类来,为了避免太多的类,我们将所有自定节点都指定一个自定义节点作为入口,然后只写一个处理类,以此为入口,读取其他节点。
例如,配置文件只定义一个入口节点:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <!--通用配置存储方法-->
<traceFact type= "ClassLib.ConfigManager,ClassLib" >
<forum name= "TraceFact.Net Community" >
<root url= "http:192.168.24.204" />
<replyCount>20</replyCount>
<pageSize>30</pageSize>
<offlineTime>20</offlineTime>
</forum>
<blog>
<root url= "http:asdakfj.com" />
<urlMappings>
<rewriteRule>
<request>~/(\d{4})/Default\.aspx</request>
<sendTo>~BlogDetail.aspx?year= $1 </sendTo>
</rewriteRule>
</urlMappings>
</blog>
<mailServer address= "www.baidu.com" userName= "lhc" password= "234r32r" />
<greetingStrategy type= "ClassLib.ChineseGreeting,ClassLib" />
</traceFact>
|
Copy after login
处理类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
public class GeneralConfigHandler:IConfigurationSectionHandler
{
public object Create(object parent, object configContext, XmlNode section)
{
Type t=Type. GetType (section.Attributes[ "type" ].Value);
object[] paramters={section};
object obj = null;
try
{
obj = Activator.CreateInstance(t, paramters);
}
catch (Exception)
{
return null;
}
return obj;
}
}
|
Copy after login
上面的类主要是为了实现创建具体配置节点管理类,在配置节点的管理类中,存有各个子节点类的引用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
public class ConfigManager
{
private XmlNode section;
private FroumConfiguration forumConfig;
public FroumConfiguration froumConfig {
get { return forumConfig; }
}
public ConfigManager(XmlNode section) {
this.section = section;
forumConfig = new FroumConfiguration(section.SelectSingleNode( "forum" ));
}
}
public class FroumConfiguration{
private XmlNode forumNode;
public FroumConfiguration(XmlNode section){
this.forumNode=section;
}
public string Name{
get{
return forumNode.Attributes[ "name" ].Value;
}
}
public string RootUrl{
get{
return forumNode.SelectSingleNode( "root" ).Attributes[ "url" ].Value;
}
}
public int PageSize{
get{
return int.Parse(forumNode.SelectSingleNode( "pageSize" ).InnerText);
}
}
public int ReplyCount{
get{
return int.Parse(forumNode.SelectSingleNode( "replyCount" ).InnerText);
}
}
public int OfflineTime {
get {
return int.Parse(forumNode.SelectSingleNode( "offlineTime" ).InnerText);
}
}
}
|
Copy after login
这样,我们使用的时候,每次都用这一个类来实现对节点的访问:
1 2 3 4 5 6 7 8 | ConfigManager config = ConfigurationManager.GetSection( "traceFact" ) as ConfigManager;
ltrName.Text = config.froumConfig.Name;
ltrOfflineTime.Text = config.froumConfig.OfflineTime.ToString();
ltrPageSize.Text = config.froumConfig.PageSize.ToString();
ltrReplyCount.Text = config.froumConfig.ReplyCount.ToString();
ltrRootUrl.Text = config.froumConfig.RootUrl.ToString();
|
Copy after login
以上就是.Net配置文件——统一节点配置管理的内容,更多相关内容请关注PHP中文网(www.php.cn)!