Duwamish配置持久化学习笔记

在学习了Duwamish和.Text的配置方法后,对两者的配置持久化做一个比较。

以ApplicationConfiguration为例,Duwamish的配置文件中的<ApplicationConfiguration>...</ApplicationConfiguration>部分对应于Duwamish.SystemFramework.ApplicationConfiguration类,

None.gif    < configSections >
None.gif    
< section  name ="ApplicationConfiguration"  type ="Duwamish7.SystemFramework.ApplicationConfiguration, Duwamish7.SystemFramework"   />
None.gif    ...
None.gif  
</ configSections >
None.gif    ...
None.gif  
< ApplicationConfiguration >
None.gif    
< add  key ="SystemFramework.Tracing.Enabled"  value ="False"   />
None.gif    
< add  key ="SystemFramework.Tracing.TraceFile"  value ="C:\Program Files\Microsoft Visual Studio .NET 2003\Enterprise Samples\Duwamish 7.0 CS\.\DuwamishTrace.txt"   />
None.gif    
< add  key ="SystemFramework.Tracing.TraceLevel"  value ="4"   />
None.gif    
< add  key ="SystemFramework.Tracing.SwitchName"  value ="DuwamishTraceSwitch"   />
None.gif    
< add  key ="SystemFramework.Tracing.SwitchDescription"  value ="Error and information tracing for Duwamish"   />
None.gif    
< add  key ="SystemFramework.EventLog.Enabled"  value ="True"   />
None.gif    
< add  key ="SystemFramework.EventLog.Machine"  value ="."   />
None.gif    
< add  key ="SystemFramework.EventLog.SourceName"  value ="Duwamish7"   />
None.gif   
< add  key ="SystemFramework.EventLog.LogLevel"  value ="1"   />
None.gif  
</ ApplicationConfiguration >
None.gif

ApplicationConfiguration类实现了System.Configuration.IConfigurationSectionHandler接口,需要实现一个create()方法,该方法将在调用System.Configuration.GetConfig()方法时自动被调用。在ApplicationConfiguration中有大量的private变量和与这些变量相对应的静态public属性,但这些public属性仅实现了get{},而不实现set{}。例如,TracingEnabled属性的实现:

None.gif public   static   bool  TracingEnabled
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif   
get
ExpandedSubBlockStart.gifContractedSubBlock.gif   
dot.gif{
InBlock.gif      
return tracingEnabled;
ExpandedSubBlockEnd.gif   }

ExpandedBlockEnd.gif}

其中,tracingEnabled为ApplicationConfiguration的私有变量。
另外,在ApplicationConfiguration类中还实现了一个ReadSetting方法,共有四个重载函数,分别提供int,string, bool, TraceLevel四种不同配置类型的设置读取功能。以下为读取string类型的ReadSetting的实现
None.gif          public   static  String ReadSetting(NameValueCollection settings, String key, String defaultValue)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            
try
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                Object setting 
= settings[key];
InBlock.gif                
InBlock.gif                
return (setting == null? defaultValue : (String)setting;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
catch
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
return defaultValue;
ExpandedSubBlockEnd.gif            }

ExpandedBlockEnd.gif        }

另一个重要方法是OnApplicationStart(),它是一个静态方法,在Global.asa中的Application_Start()事件中被调用,用于在web站点被访问前,将设置读入System.Configuration.ConfigurationSettings中,而ReadSetting方法正是从ConfigurationSettings中读出设置的。ReadSetting的参数settings是通过baseHandler.Create()方法获得ConfigurationSettings的引用的,如下所示
None.gif             NameValueSectionHandler baseHandler  =   new  NameValueSectionHandler();
None.gif                settings 
=  (NameValueCollection)baseHandler.Create(parent, configContext, section);

在配置文件中,我发现一个有趣的现象,add项中的key值为一些不存在类和属性
None.gif < add key = " SystemFramework.Tracing.Enabled "  value = " False "   />
在以上代码中,SystemFramework.Tracing根本不存在,更不用说Enabled属性了。实际上,这个key仅仅用于标识变量,如果要读取这个设置就可以用ReadSetting(settings,"SystemFramework.Tracing.Enabled",defaultValue)完成,而从web页中读取这个设置则可以用SystemFramework.ApplicationConfiguration.TracingEnabled静态属性。

如果我们想使配置文件与上层的类相对应,可以考虑创建一个SystemFramework.Tracing类(见下图),并加入Enabled属性,然后在Enabled属性中调用SystemFramework.ApplicationConfiguration.TracingEnabled,这样就可以根据类来对配置进行有效分类,同时,也保证配置结构与上层结构的一致

None.gif namespace  SystemFramework
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif     
class Tracing
ExpandedSubBlockStart.gifContractedSubBlock.gif     
dot.gif{
InBlock.gif          dot.gif
InBlock.gif          
public static bool Enabled
ExpandedSubBlockStart.gifContractedSubBlock.gif          
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif              
getdot.gif{return ApplicationConfiguration.TracingEnabled;}
ExpandedSubBlockEnd.gif          }

InBlock.gif          dot.gif
ExpandedSubBlockEnd.gif     }

ExpandedBlockEnd.gif}

最后是我画的配置持久化模型图:
gif_1.gif 
参考:
《Duwamish深入剖析-配置篇》 http://www.aspcool.com/lanmu/browse1.asp?ID=1045&bbsuser=aspnet
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值