由Duwamish学习web.config的配置

regular_smile.gifWeb.config

[UpDate@]2004.10.31

(1)各个标记名的命名规则:
标记名和属性名是 Camel 大小写形式的,这意味着标记名的第一个字符是小写的,任何后面连接单词的第一个字母是大写的。属性值是 Pascal 大小写形式的,这意味着第一个字符是大写的,任何后面连接单词的第一个字母也是大写的。true 和 false 例外,它们总是小写的。

(2)配置层次总图

所有配置信息都驻留在 <configuration> 和 </configuration> 根 XML 标记之间。
标记间的配置信息分为两个主区域:配置节处理程序声明区域和配置节设置区域。

None.gif <? xml version="1.0" ?>   <!--  可以不要  -->
None.gif
< configuration >
None.gif
<!--  ============= 1 =============================== ! -->
None.gif
<!--  配置节处理程序声明区域(必须放在本节点的最上)  -->
None.gif 
< configSections >
<section name="appSettings" type="System.Configuration.NameValueFileSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<!-- 这个section没有放到任何命名空间分组里面  -->
None.gif  
< sectionGroup  name ="system.web" >   <!--  按照命名空间分组  -->
None.gif            
< section  name ="authorization"  
None.gif                type
="System.Web.Configuration.AuthorizationConfigHandler, 
None.gif                System.Web, Version=1.0.3300.0, Culture=neutral, 
None.gif                PublicKeyToken=b03f5f7f11d50a3a"
/>             
None.gif            
< section  name ="sessionState"  
None.gif               type
="System.Web.SessionState.SessionStateSectionHandler,
None.gif                System.Web, Version=1.0.3300.0, Culture=neutral,
None.gif                PublicKeyToken=b03f5f7f11d50a3a"

None.gif                allowDefinition
="MachineToApplication" />         
None.gif         
</ sectionGroup >
None.gif
None.gif 
</ configSections >
None.gif
<!--  ========= /1 ========================  -->
None.gif
<!--  =========  2 ========================   -->
None.gif
<!--   配置节设置区域  -->
None.gif
<!--   如果没有上面的配置节处理程序声明区域,但默认继承了mechine.config,所以,我们在配置<authorization>等节点的
None.gif的时候,还是要加上它的组名称<system.web>
None.gif  
-->
None.gif
< system .web >
None.gif        
< authorization >
None.gif            
< allow  users ="*" />   <!--  Allow all users  -->
None.gif            
<!--  Allow or deny specific users.
None.gif            allow users="[comma separated list of users]"
None.gif                  roles="[comma separated list of roles]"/>
None.gif            <deny users="[comma separated list of users]"
None.gif                  roles="[comma separated list of roles]"/>
None.gif            
-->
None.gif        
</ authorization >
None.gif        
< sessionState 
None.gif            
sqlConnectionString ="data source=localhost;
None.gif               Integrated Security=SSPI;
None.gif               Initial Catalog=northwind"

None.gif            cookieless
="false"  
None.gif            timeout
="10" />
None.gif 
</ system.web >
None.gif
<!--  mechine.config没有分组的节点名称有:
None.gifruntime
None.gifmscorlib
None.gifstartup
None.gifsystem.runtime.remoting
None.gifsystem.diagnostics
None.gifappSettings
None.gif所以他们在配置的时候就少了一个层次.
None.gif
-->
None.gif
<!--  ================ /2 =========================   -->
None.gif
</ configruation >
None.gif
None.gif

(3)配置原理

Example:

在配置节处理程序声明
<section name="appSettings" type="System.Configuration.NameValueFileSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
这个Section的name属性表示我们要在下面的配置节设置区域对应的名称.
type属性由指定的类来处理读取配置节设置区域的字段,其实这个type也定义了我们在配置节设置区域的配置格式.我们姑且把这种格式成为 名称/值对.

就这个type而言,上面例子的配置设置格式是:
<appSettings>
 <add key="name" value="caca"/>
 <add key="email" value="licunqing@gmail.com"/>
</appSettings>

我们可以这样读取key的value
string myname=System.Configuration.ConfigurationSettings.AppSettings["name"];
也可以读取所有的key的value返回一个集合
NameValueCollection config=(NameValueCollection)System.Configuration.ConfigurationSettings.GetConfig["appSettings"];
string myname=config["name"];
string myemail=config["email"];

所以,我们可以建立自己的type,至于相应的配置节设置区域的格式,我们这里还用System.Configuration.NameValueFileSectionHandler的形式.
来看看duwamish中的的例子
其配置节声明区域有一个自定义的Type类型:
<section name="DuwamishConfiguration" type=" Duwamish7.Common.DuwamishConfiguration, Duwamish7.Common" />

其相应的配置节声明格式为:

 <DuwamishConfiguration>
        <!-- Settings specific to the Duwamish application -->

        <add key="Duwamish.Web.EnablePageCache" value="True"/>
......
<DuwamishConfiguration>

显然这种配置节设置格式就是上面提到的 名称/值对的格式.

看来这个Section其本质的type类型还是System.Configuration.NameValueFileSectionHandler.

看看 Duwamish7.Common.DuwamishConfiguration
None.gif   public   class  DuwamishConfiguration : IConfigurationSectionHandler
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif 
//这里简化了原代码
InBlock.gif
 public Object Create(Object parent, object configContext, XmlNode section)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
InBlock.gif            NameValueCollection settings;
InBlock.gif
InBlock.gif         NameValueSectionHandler baseHandler 
= new NameValueSectionHandler();
InBlock.gif                settings 
= (NameValueCollection)baseHandler.Create(parent, configContext, section);
InBlock.gif
InBlock.gif            
return settings;
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedBlockEnd.gif}

None.gif

确实,其本质就是NameValueSectionHandler,Duwamish7.Common.DuwamishConfiguration调用它,返回调用它的结果而已.
但是,我们这里可以加一些自己的东西,从而很好的控制它,比如在Duwamish中,实现如果节点配置域没有设置那些key 以及对应的value,就让他返回一个默认值。(参见Duwamish7.Common.DuwamishConfiguration)

 

[增加修改中......]
===========
参考:
全部信息请search MSDN:ASP.NET 配置系统 / 配置文件架构
另外看看Duwamish的源代码
http://www.microsoft.com/china/community/program/originalarticles/TechDoc/duwamish_con.mspx

 

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值