Web.config中创建自定义配置节

    Web.config文件可谓是每个ASP.NET站点必不可少的一个文件,其中记录了网站的各种配置。一些比较静态但是又可能变更的数据可以放在web.config中,已有的appSettings配置节便有这种用途。

<configuration>

……

<appSettings>

    <addkey="setting1"value="valueOfSetting1"/>

 </appSettings>

……

</configuration>

    在代码中可以用如下方式访问到添加的setting

string value = ConfigurationManager.AppSettings["setting1"];

    这种方式所得到的配置的值缺点至少有二:首先不能用Intelligence来感知我设置的“字段”,其次这种方式只能存放和取出string类型的值(尽管你可以将字符串true转换为bool型的true,但是更复杂的类型呢?)。

    但是.net框架毕竟是可扩展的,我们也可以在web.config中存放自己的配置节!

    如果我在web.config中添加这样一段配置

<configuration>

……

<siteSettings>

    <language>

      <langsvalue="en,zh"/>

</language>

</siteSettings>

……

</configuration>

    怎样通过代码来读取我们设置的值呢?

    方法有两种,一种是创建继承自IConfigurationSectionHandler 接口的类,一种是创建继承自ConfigurationSection的类,由于第一种继承自接口的已经是不推荐的了,所以我就只介绍第二种了!

    在App_Code下添加如下类

public class LanguageConfigSection:ConfigurationSection

{

     public LanguageConfigSection()

     {

         //

         // TODO: Add constructor logic here

         //

     }

    [ConfigurationProperty("langs")]

    public LanguageConfigElement Languages

    {

        get { return (LanguageConfigElement)this["langs"]; }

        set { this["langs"] = value; }

    }

}

public class LanguageConfigElement : ConfigurationElement

{

    [ConfigurationProperty("value")]

    public string Langs

    {

        get { return (string)this["value"]; }

        set { this["value"] = value; }

    }

}

    当然如果这样的话web.config会很不友好的说我添加的这个配置节是外来的陌生人,不会收留的。我们需要做的是在configuration配置节下设置自己的配置节的处理方式:

<configuration>

 <configSections>

    <sectionGroupname="siteSettings">

      <sectionname="language"type="LanguageConfigSection"/>

    </sectionGroup>

 </configSections>

……

</configuration>

    好了,基础设施已经铺设成功了,现在迫切需要知道的是我怎么来读出我的设置!

    方法如下:

LanguageConfigSection section = (LanguageConfigSection)ConfigurationManager.GetSection("siteSettings/language");

string langs = section.Languages.Langs; // 得到的结果是"en,zh"的字符串

如果你还不明白的话,不用急,我用几张图来道明白!


    这只是最简单的配置(只是从web.config中取了一个string值出来),还有比如Providers那种配置就稍显复杂,而且还会用到ProviderBase之类的,在此暂时不多做介绍。这种灵活的config还是蛮有意思的,究竟是怎样来实现这种灵活的配置的呢?框架做了哪些工作?由于时间关系我还没去研究,有兴趣的朋友可以用Reflector去探个究竟。

     个人第一篇博客园文章,献丑了。

转载于:https://www.cnblogs.com/LongWay/archive/2008/06/06/1214854.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值