当前位置:首页>网络学院>程序开发>ASP.NET教程>文章内容

在Web.config配置文件中自定义配置节点

[ 来源:www.it55.com | 作者: | 时间:2007-07-15 | 收藏 | 推荐 ] 【

摘要:

大部分ASP.NET应用程序都包含很多个配置信息,比较常见的有连接字符串配置ConnectionString;当我们需要用到Login控件自动发送Email时,我们就要配置Email服务器节点;还有很多如Page节点可以引入程序集和命名空间等等。根据我的经验很多网站的初始化信息(默认设置)很多都会保存在数据库中,也有很多保存在配置文件中,他们各有各的优点。我们可以在web.config中定义我们自己的节点,然后再读取或更新自定义配置文件,当然我们也可以自定义一个配置文件并将其解析读取。本文主要讲的是利用ASP.NET给我提供的一些APIs在Web.config中自定义配置节点。

vd;k;l www.it55.com rdfg

为了能够更好的说明,我们先定义一个配置节点<NExplus/>,它有一个属性网站名称webName。有自己的Providers,以及一个States节点,配置如下:
复制XML代码保存代码<NExplus webName="Custom configuration section in web.config">
<providers>
<add name="CommonProvider"
type="NExplus.Data.SqlCommonProvider,NExplus.Data"
connectionStringName="SqlServer"/>
</providers>
<states>
<add name="厦门" code="0592"/>
<add name="福州" code="0591"/>
<add name="三明" code="0598"/>
</states>
</NExplus><NExplus webName="Custom configuration section in web.config">
<providers>
<add name="CommonProvider"
type="NExplus.Data.SqlCommonProvider,NExplus.Data"
connectionStringName="SqlServer"/>
</providers>
<states>
<add name="厦门" code="0592"/> 免费资源www.it55.com
<add name="福州" code="0591"/>
<add name="三明" code="0598"/>
</states>
</NExplus>
45398 www.it55.com it55学习IT知识,享受IT生活 4dfkjn

读取方法: 免费资源www.it55.com

配置文件中就是XML文件,如果是我们自定义地配置文件可以用DotNet读取XML的方法通过序列化和反序列化等来读取,在以后的版本中还可以通过XLinQ来读取。而在web.config文件中主要可以通过两种方法来读取配置文件,当然首先要做的是在<configSections>节点中配置关联的操作类及其程序集。 免费资源www.it55.com

1.定义一个类,实现System.Configuration.IConfigurationSectionHandler接口,这个方法很简单就是实现一个方法,这里就不再多说了。 IT资讯之家 www.it55.com


2.在ASP.NET2.0中我们已经能够很简单的操作配置文件中的节点了,他为我们提供了一系列的类如我们定义一个类只要继承ConfigurationSection就可以定义我们的节点了,子节点可以继承ConfigurationElement等等。只要在属性上标注ConfigurationProperty attribute即可。

45398 www.it55.com it55学习IT知识,享受IT生活 4dfkjn

定义配置类:
复制C#代码保存代码public class CustomConfiguration : ConfigurationSection
{
[ConfigurationProperty("webName",
DefaultValue = "Custom configuration section in web.config ",
IsRequired = false)]
public string WebName
{
get { return this["webName"] as string; }
}
}
以上只列出了读取属性的方法,每一个用ConfigurationProperty attribute标注的属性就能够自动从web.config文件中反序列过来实例化当前类。下面我们来看看ConfigurationProperty attribute的每一个属性的作用。

45398 www.it55.com it55学习IT知识,享受IT生活 4dfkjn

Name:配置节点名称或属性名称,要求唯一标识。 it55.com

DefaultValue:配置文件中每个属性的默认值,如果配置文件中没有定义此属性则在代码中调用此属性时,将取得这个值。 www.it55.com在线教程

IsRequired:标明当前属性是否必须,如果为true而配置文件中并没有定义此属性,当访问此网站时将抛出错误。 IT资讯之家 www.it55.com

我们可以通过System.Web.Configuration.WebConfigurationManager来获取此节点的实例,代码如下:
复制C#代码保存代码public static CumstomConfiguration GetConfig()
{
return WebConfigurationManager.GetSection("NExplus") as CumstomConfiguration;
}

IT资讯之家 www.it55.com

基于集合配置属性的读取:

it55.com

很多时候我们需要得到一个集合的所有配置,最常见的莫过于providers,系统已经为我们准备好了ProviderCollection,我们只要直接引用就好了。但是如果遇到向上面定义的<states>节点的读取就需要我们自己来写一个集合,这个集合要继承ConfigurationElementCollection类,而当前实体类需继承ConfigurationElement类。为了读取<states>节点我们定义一个实体类如下:
复制C#代码保存代码public class ConfigurationState : ConfigurationElement
{
[ConfigurationProperty("name", IsRequired = true)]
public string Name
{
get { return this["name"] as string; }
}

www.it55.com

[ConfigurationProperty("code", IsRequired = false)]
public string Code
{
get { return this["code"] as string; }
}
}

有了实体类我们当然要写一个集合类,代码如下:
复制C#代码保存代码public class ConfigurationStateCollection : ConfigurationElementCollection
{
public ConfigurationState this[int index]
{
get { return base.BaseGet(index) as ConfigurationState; }
set
{
if (base.BaseGet(index) != null)
{
base.BaseRemoveAt(index);
}
this.BaseAdd(index, value);
}
} it55.com

protected override ConfigurationElement CreateNewElement()
{
return new ConfigurationState();
}

it55.com

protected override object GetElementKey(ConfigurationElement element)

(编辑:IT资讯之家 www.it55.com

返回顶部
共2页: 上一页 1 [2] 下一页  

网友评论

[以下评论为网友观点,不代表本站。请自觉遵守互联网相关政策法规,所有连带责任均有评论者自负。]
[不超过250字]

图片文章