IConfigurationSectionHandler 接口的用法



IConfigurationSectionHandler 接口的用法。

对asp.net 的配置文件即熟悉又陌生,熟悉的是天天在使用,陌生是实现原理还是个糊涂的概念.
今天终于花了点时间了解一下IConfigurationSectionHandler 接口的用法 ,引以入门.
首先建立一 RobsunConfigSectionHandler 专案,代码如下 :

namespace RobsunConfigSectionHandler
{
public class RobsunParaSectionHandler:IConfigurationSectionHandler
{
#region IConfigurationSectionHandler 成員

        public object Create(object parent, object configContext, XmlNode section)
{
RobsunPara para = new RobsunPara();

            foreach (XmlNode xn in section.ChildNodes)
{
switch (xn.Name)
{
case “path”:
para.Path = xn.SelectSingleNode(“@value”).InnerText;
break;
case “companyName”:
para.CompanyName = xn.SelectSingleNode(“@value”).InnerText;
break;
case “isPrivate”:
para.IsPrivate = bool.Parse(xn.SelectSingleNode(“@attribute”).InnerText);
break;
}
}

            return para;
}

        #endregion
}
}
RobsunParaSectionHandler类实现 IConfigurationSectionHandler 接口.

RobsunPara类(实际就是参数类)的代码如下:

    public class RobsunPara
{
#region code
private string _path = “”;
private string _companyName = “”;
private bool _isPrivate = false;

        public string Path
{
get { return _path; }
set { _path = value; }
}


        public string CompanyName
{
get { return _companyName; }
set { _companyName = value; }
}

        public bool IsPrivate
{
get { return _isPrivate; }
set { _isPrivate = value; }
}
#endregion
}

ConfigurationHander类的创建工作已完成,次handler的工作必须配合如下配置文件的格式(其实的配置文件依赖handler).这里是web.config(三种配置文件任一,web.config,App.config,machine.config ,前两种会覆盖machine.config,当然这里是没法子在App.config配置了 ~Q~ )
<configuration>

<configSections>
<sectionGroup name=”robsunGroup”>
<section name=”robsunSection” type=”RobsunConfigSectionHandler.RobsunParaSectionHandler,RobsunConfigSectionHandler”/>
</sectionGroup>
</configSections>

<robsunGroup>
<robsunSection>
<path value=”NONE”/>
<companyName value=”Robsun”/>
<isPrivate attribute=”true”/>
</robsunSection>
</robsunGroup>

<appSettings/>
<connectionStrings/>
<system.web>

准备代码都已完成.剩下的就是拿来用了….
这里为了简单起见,就直接在page_load里实现了:

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
RobsunConfigSectionHandler.RobsunPara para
= ConfigurationManager.GetSection(“robsunGroup/robsunSection”) as RobsunConfigSectionHandler.RobsunPara;

        Response.Write(“CompanyName: ” + para.CompanyName + “<br>”);
Response.Write(“Path: ” + para.Path + Environment.NewLine + “<br>”);
Response.Write(“isPrivate: ” + para.IsPrivate.ToString() + “<br>”);
}
}

以上只是对IConfigurationSectionHandler 接口的简单事例.配置文件的强大也只有在以后的工作中慢慢体会了