注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天涯倦客的博客

祝福你朋友永远快乐!

 
 
 

日志

 
 

使用web.config中的configSections  

2012-12-27 22:13:12|  分类: asp.net |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

之前的一篇文章“使用URLRewriter让你的站点牛逼起来- -!”中在讲述使用URLRewriter.dll的时候对web.config文件的配置中,第一步就提到对“configSections”节点的配置,在第二步中又根据第一步的配置来进行了进一步的节点配置——自定义节点的配置(“RewriterConfig”节点)。本文将通过实例简单描述一下configSections加点的使用方法^^

    【使用section节点】
    考虑一下这个需求,我们想要在web.config中使用自己定义的节点做一些配,例如把网站的超级管理员的登陆账号和密码给配置进去,然后在程序中读取它(当然一般我们不会这么做 - -!)。这样做的好处是我们可以使用自己定义的数据结构(xml格式),而配置信息的安全可以让web.config去管理。但是...,web.config是不可能随随便便让你定义节点的——可以试下自己定义个节点,编译的时候会报错。当然,有时候我们会自己创建个xml文件,那就另当别论了,不过这样做文件的安全性和数据的缓存就要要自己搞定了。

    为了满足上面提的需求,我们可以使用configSections(在根节点“configuration”中)了,例如我们要配置一个这样的节点,名为“AdminInfo”,它有两个子节点,分别叫“Account”和“Password”,把他配置到根节点“configuration”中,如下:
xml代码
<configuration>
  <AdminInfo>
    <Account>serafin</Account>
    <Password>123456</Password>
  </AdminInfo>
</configuration>
    为了让这个自定义的节点为我们所用,现在在“configSections”节点中加入一个“section”节点,如下:
xml代码
<configuration>
  <configSections>
    <section name="AdminInfo" type="ConfigSectionsTest.AdminInfoConfigurationSectionHandler" />
  </configSections>
</configuration>
    上面这个配置的意思是,声明一个自定义节点,名字叫“AdminInfo”,这个节点的读取要通过一个名为ConfigSectionsTest.AdminInfoConfigurationSectionHandler的类来读取,那么ConfigSectionsTest.AdminInfoConfigurationSectionHandler类如何定义呢?C#.NET中ConfigurationManager类的GetSection(string sectionName)静态方法就是用于读取这些自定义配置节点的,前提是要提供一个类用于实现IConfigurationSectionHandler接口的唯一方法Create(object parent, object configContext, System.Xml.XmlNodesection),在这个例子中用于实现该接口的类便是ConfigSectionsTest.AdminInfoConfigurationSectionHandler类,下面是这个类的定义:
c#代码
namespace ConfigSectionsTest
{
    /// <summary>
    /// AdminInfoConfigurationSectionHandler
    /// </summary>
    public class AdminInfoConfigurationSectionHandler : IConfigurationSectionHandler
    {
        /// <summary>
        /// Create
        /// </summary>
        /// <param name="parent"></param>
        /// <param name="configContext"></param>
        /// <param name="section"></param>
        /// <returns></returns>
        public object Create(object parent, object configContext, System.Xml.XmlNode section)
        {
            return section;
        }
    }
}


    实现了接口的方法,Create(object parent, object configContext, System.Xml.XmlNode section)中的最后一个参数便是我们的自定义节点了,是一个Xml节点对象,得到这个几点,我们便可以做我们想做的事情了(例如装成一个实体模型类对象,一个字典,哈希表之类的,只要你喜欢),因为返回的是一个object。
    到这里,我们可以测试一下了,顺便创建个页面,在后台代码里面测试,例如点击个按钮然后读取这个节点显示在文本框中,如下:
c#代码
protected void btnGetAdminInfo_Click(object sender, EventArgs e)
{
    Object adminInfo = ConfigurationManager.GetSection("AdminInfo"); // 读取自定义节点
    System.Xml.XmlNode node = adminInfo as System.Xml.XmlNode;  // 装成XmlNode对象
    this.txtInfo.Text = node.OuterXml;  // 显示在文本框中
}
    【使用sectionGroup节点】
    “configSections”中还有一个重要的节点,叫做“sectionGroup”,从名字中可以看出它作用,有了上面的理解作为基础,考虑一下下面这个自定义节点:
xml代码
<configuration>
  <WebSiteInfo>
    <BasicInfo>
      <add key="SiteName" value="Tiu's Zone"/>
      <add key="Version" value="1.0"/>
    </BasicInfo>
    <FileUpload>
      <add key="FileUploadPath" value="E:\\MyHomePage\\Web\\Upload\\"/>
      <add key="FileUploadSizeMax" value="2M"/>
    </FileUpload>
  </WebSiteInfo>
</configuration>


    为了使用“WebSiteInfo”这个自定义节点,我们需要在“configSections”中做这样的配置:
xml代码  
<configuration>
  <configSections>
    <sectionGroup name="WebSiteInfo">
      <section name="BasicInfo" type="ConfigSectionsTest.WebSiteInfoConfigurationSectionHandler"/>
      <section name="FileUpload" type="ConfigSectionsTest.WebSiteInfoConfigurationSectionHandler"/>
    </sectionGroup>
  </configSections>
</configuration>
    这里应该不用做太多说明了,通过上面的代码我们可以很清楚的理解sectionGroup的作用(ConfigSectionsTest.WebSiteInfoConfigurationSectionHandler类的实现和上面的ConfigSectionsTest.AdminInfoConfigurationSectionHandler完全一样,这里就不打出来鸟),读取节点的方法有点不同,主要是不同在对节点选择的路径上,直接看下面的代码就明白了:
c#代码
protected void btnGetWebSiteInfo_Click(object sender, EventArgs e)
{
    Object basicInfo = ConfigurationManager.GetSection("WebSiteInfo/BasicInfo"); // 读取自定义节点
    System.Xml.XmlNode node = adminInfo as System.Xml.XmlNode; // 装成XmlNode对象
    this.txtInfo.Text = node.OuterXml; // 显示在文本框中
}
    configSections节点的在开发中是很有用的,一个典型的情景就是文章开头提到的那个URLRewriter.dll组件,在增强应用程序的可移植性上,我们通常会需要一些自定义节点,上面那两个例子也是也说明了这一点(当然配置在appSetting节点中也是一种办法,但就没法灵活地定义自己的数据结构了)。文件说的很浅,要更好的使用这个配置,还是要看官方的文档,列举如下:
    MSDN中对configSections 元素的说明:http://msdn.microsoft.com/zh-cn/library/ms228256(v=VS.80).aspx
    MSDN中对IConfigurationSectionHandler接口的说明:http://msdn.microsoft.com/zh-cn/library/ms228056(VS.80).aspx
  本文的例子在这里:有需要的话请 点击下载 ^—^
http://www.cnblogs.com/serafin/archive/2012/07/13/2589960.html
  评论这张
 
阅读(604)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017