All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
ASP.NET用Repeater控件显示数据_[Asp.Net教程]
用PHP制作动态计数器_php资料_编程技术
实用举例:利用PHP代码实现网页自动判断转向_php资料_编程技术
理解PHP5中static和const关键字_php资料_编程技术
单击GridView某行获取该行某列内容并显示_[Asp.Net教程]
图片在已知大小容器中的水平垂直居中实例_[Html教程]
ASP.NET,2.0打造购物车和支付系统之一_.net资料_编程技术
VS2008的网页报表可以直接打印了_[Asp.Net教程]
动态网页技术PHP中关于类的几点使用技巧_php资料_编程技术
Windows,Apache,PHP,MySQL,搭建_php资料_编程技术
Reading number is top 10 pictures
玩手机对身体不好
A man's favorite things4
八个盛产美女的国家1
超级大兔子
大人物的礼物
奇趣的世界记录2
The money of more than 100 countries and regions2
联通的3G无线网卡我只用了一天,看看流量......
The money of more than 100 countries and regions7
Terrorist smile the largest human history an explosion1
Download software ranking
Tram sex maniac 2 (H) rar bag9
Ashlynn Video3
Ashlynn Video5
matrix3
Tram sex maniac 2 (H) rar bag10
I'm come from Beijing2
SP3 for SQL2000
Unix video tutorial12
Boxer's Top ten classic battle3
天龙八部十二宫服务端
delv published in(发表于) 2014/1/23 3:14:34 Edit(编辑)
在Web.config配置文件中自定义配置节点_[Asp.Net教程]

在Web.config配置文件中自定义配置节点_[Asp.Net教程]

在Web.config配置文件中自定义配置节点_[Asp.Net教程]

摘要:


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


为了能够更好的说明,我们先定义一个配置节点,它有一个属性网站名称webName。有自己的Providers,以及一个States节点,配置如下:
复制XML代码保存代码

type="NExplus.Data.SqlCommonProvider,NExplus.Data"
connectionStringName="SqlServer"/>








type="NExplus.Data.SqlCommonProvider,NExplus.Data"
connectionStringName="SqlServer"/>







读取方法:


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


1.定义一个类,实现System.Configuration.IConfigurationSectionHandler接口,这个方法很简单就是实现一个方法,这里就不再多说了。



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


定义配置类:
复制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的每一个属性的作用。


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


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


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


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


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


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


[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);
}
}


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


protected override object GetElementKey(ConfigurationElement element)
{
return ((ConfigurationState) element).Name;
}
}
我们需要对当前集合进行索引读取或设置,重写了两个方法,从而能够获取当前实例和获取当前配置节点的名称等,当然最后一步就是要将它加入到配置类中(次配置类一定要在configSettings节点中标注)。代码如下:
复制C#代码保存代码public class CustomConfiguration : ConfigurationSection
{
[ConfigurationProperty("states")]
public ConfigurationStateCollection CustomStates
{
get { return this["states"] as ConfigurationStateCollection; }
}
}


总结:


这篇文章已经不是什么新鲜的事了,由于最近我也在做这个事情,其中值得说明的是在providers的应用,我们可以通过ProvidersCollection来读取其集合,通过ProvidersHelper来实例化当前provider,如果在你的数据库提供者抽象类中继承ProviderBase类万事就OK了。如果考虑到性能问题可以借助Cache来提高一些性能,最后还是希望能给更多人带来一点帮助,分享一下我的经验。


来源:CNBLOGS







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.