[ASP.NET] 自定义配置节及处理

1. <appsettings>

asp.net的web.config中,提供了<appsettings>来自定义一些配置。

<appsettings>是根级目录<configuration>的子级。

<appSettings>
	<add key="uid" value="admin"/>
	<add key="pwd" value="adminpwd"/>
</appSettings>

程序中,我们通过如下方式取得配置的值:

Label1.Text = WebConfigurationManager.AppSettings["uid"];

这是最简单的方式来配置和取值。如果有很多值需要配置,那么它们都将挤在<appsettings>里面,很难一眼看出哪些是配置程序的哪一块。

如果想用一个特别的名字来标识自定义的配置,让配置清晰易管理,就用下面这种方式。


2. <configSections>

<configSections>里面可以定义自己的配置节和配置节处理程序。

<configSections>是<configuration>的子级,并且紧挨着<configuration>出现。

<configSections>有两种子级:<sectionGroup>和<section>,这两种子级可以嵌套。

这两种子级常用的属性有两个:

name给自定义的配置节取个名字。

type给自定义的配置节指定一个处理程序。

在下面的例子中,仍然使用简单的值名对,使用.net内置的配置节处理程序。

<sectionGroup name="SGroup">
	<section name="SConfig" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</sectionGroup>


然后我们可以使用自定义的配置节了:

<SGroup>
	<SConfig>
		<add key="uid" value="admin" />
		<add key="pwd" value="adminpwd" />
	</SConfig>
</SGroup>


通过如下方式取值:

var sconfig = (NameValueCollection)ConfigurationManager.GetSection("SGroup/SConfig");
Label1.Text = sconfig["uid"];


但要使用更复杂的配置,并且在程序中可以强类型引用,我们就必须要自定义配置节处理程序了。


3. 配置节处理程序

前面例子中的 "System.Configuration.NameValueSectionHandler"就是一个配置节处理程序,这是.net内置的值名对处理程序。

ConfigurationManager.GetSection("SGroup/SConfig")将这一段自定义的配置节读出来,传给NameValueSectionHandler对象进行处理,处理完成后返回一个object,这个object是NameValueCollection类型的,所以直接强转就行了。

下面我们来自已定义一个处理程序:

public class MySectionOneSection : ConfigurationSection
    {
        [ConfigurationProperty("propertyOne")]
        public string PropertyOne
        {
            get { return (string)this["propertyOne"]; }
        }

        [ConfigurationProperty("MyElementOne")]
        public MyElementOneSection MyElementOne
        {
            get { return (MyElementOneSection)this["MyElementOne"]; }
        }
    }

配置节处理程序要继承ConfigurationSection,然后给属性和子标签写Attribute,这是把配置节的属性名和子标签名映射为强类型的C#属性,方便代码中使用。

注意“MyElementOneSection”这个类型,这是为Section的子标签写的类,它继承自ConfigurationElement。

public class MyElementOneSection : ConfigurationElement
{
    [ConfigurationProperty("propertyOne")]
    public string PropertyOne
    {
        get { return (string)this["propertyOne"]; }
    }
}

此时可以添加我们的配置文件节

<configSections>
    <section type="ConfigHandler.MySectionOneSection, ConfigClassLib" name="MySectionOne"></section>
</configSections>

<MySectionOne propertyOne="My Section Property One">
	<MyElementOne propertyOne="My Element Property One"></MyElementOne>
</MySectionOne>

程序中这样使用它:

var mySection = (MySectionOne)ConfigurationManager.GetSection("MySectionOne");
Label1.Text = mySection.MyElementOne.PropertyOne;
Label2.Text = mySection.PropertyOne;

我们可以直接使用AppSetting和ConnectionString,因为系统定义好了配置节处理程序。

通过自定义配置节处理程序,我们也可以实现一样的效果,MSDN上的例子有更多Attibute的使用:

http://msdn.microsoft.com/zh-cn/library/system.configuration.configurationsection.aspx#Y3100



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值