天天看點

Duwamish配置持久化學習筆記

在學習了Duwamish和.Text的配置方法後,對兩者的配置持久化做一個比較。

以ApplicationConfiguration為例,Duwamish的配置檔案中的<ApplicationConfiguration>...</ApplicationConfiguration>部分對應于Duwamish.SystemFramework.ApplicationConfiguration類,

Duwamish配置持久化學習筆記

   < configSections >

Duwamish配置持久化學習筆記

     < section  name ="ApplicationConfiguration"  type ="Duwamish7.SystemFramework.ApplicationConfiguration, Duwamish7.SystemFramework"   />

Duwamish配置持久化學習筆記

    ...

Duwamish配置持久化學習筆記

   </ configSections >

Duwamish配置持久化學習筆記

    ...

Duwamish配置持久化學習筆記

   < ApplicationConfiguration >

Duwamish配置持久化學習筆記

     < add  key ="SystemFramework.Tracing.Enabled"  value ="False"   />

Duwamish配置持久化學習筆記

     < add  key ="SystemFramework.Tracing.TraceFile"  value ="C:\Program Files\Microsoft Visual Studio .NET 2003\Enterprise Samples\Duwamish 7.0 CS\.\DuwamishTrace.txt"   />

Duwamish配置持久化學習筆記

     < add  key ="SystemFramework.Tracing.TraceLevel"  value ="4"   />

Duwamish配置持久化學習筆記

     < add  key ="SystemFramework.Tracing.SwitchName"  value ="DuwamishTraceSwitch"   />

Duwamish配置持久化學習筆記

     < add  key ="SystemFramework.Tracing.SwitchDescription"  value ="Error and information tracing for Duwamish"   />

Duwamish配置持久化學習筆記

     < add  key ="SystemFramework.EventLog.Enabled"  value ="True"   />

Duwamish配置持久化學習筆記

     < add  key ="SystemFramework.EventLog.Machine"  value ="."   />

Duwamish配置持久化學習筆記

     < add  key ="SystemFramework.EventLog.SourceName"  value ="Duwamish7"   />

Duwamish配置持久化學習筆記

    < add  key ="SystemFramework.EventLog.LogLevel"  value ="1"   />

Duwamish配置持久化學習筆記

   </ ApplicationConfiguration >

Duwamish配置持久化學習筆記

ApplicationConfiguration類實作了System.Configuration.IConfigurationSectionHandler接口,需要實作一個create()方法,該方法将在調用System.Configuration.GetConfig()方法時自動被調用。在ApplicationConfiguration中有大量的private變量和與這些變量相對應的靜态public屬性,但這些public屬性僅實作了get{},而不實作set{}。例如,TracingEnabled屬性的實作:

Duwamish配置持久化學習筆記

public   static   bool  TracingEnabled

Duwamish配置持久化學習筆記
Duwamish配置持久化學習筆記
Duwamish配置持久化學習筆記

{

Duwamish配置持久化學習筆記

    get

Duwamish配置持久化學習筆記
Duwamish配置持久化學習筆記
Duwamish配置持久化學習筆記

{

Duwamish配置持久化學習筆記

      return tracingEnabled;

Duwamish配置持久化學習筆記

   }

Duwamish配置持久化學習筆記

}

其中,tracingEnabled為ApplicationConfiguration的私有變量。

另外,在ApplicationConfiguration類中還實作了一個ReadSetting方法,共有四個重載函數,分别提供int,string, bool, TraceLevel四種不同配置類型的設定讀取功能。以下為讀取string類型的ReadSetting的實作

Duwamish配置持久化學習筆記

         public   static  String ReadSetting(NameValueCollection settings, String key, String defaultValue)

Duwamish配置持久化學習筆記
Duwamish配置持久化學習筆記
Duwamish配置持久化學習筆記

{

Duwamish配置持久化學習筆記

            try

Duwamish配置持久化學習筆記
Duwamish配置持久化學習筆記
Duwamish配置持久化學習筆記

{

Duwamish配置持久化學習筆記

                Object setting = settings[key];

Duwamish配置持久化學習筆記
Duwamish配置持久化學習筆記

                return (setting == null) ? defaultValue : (String)setting;

Duwamish配置持久化學習筆記

            }

Duwamish配置持久化學習筆記

            catch

Duwamish配置持久化學習筆記
Duwamish配置持久化學習筆記
Duwamish配置持久化學習筆記

{

Duwamish配置持久化學習筆記

                return defaultValue;

Duwamish配置持久化學習筆記

            }

Duwamish配置持久化學習筆記

        }

另一個重要方法是OnApplicationStart(),它是一個靜态方法,在Global.asa中的Application_Start()事件中被調用,用于在web站點被通路前,将設定讀入System.Configuration.ConfigurationSettings中,而ReadSetting方法正是從ConfigurationSettings中讀出設定的。ReadSetting的參數settings是通過baseHandler.Create()方法獲得ConfigurationSettings的引用的,如下所示

Duwamish配置持久化學習筆記

            NameValueSectionHandler baseHandler  =   new  NameValueSectionHandler();

Duwamish配置持久化學習筆記

                settings  =  (NameValueCollection)baseHandler.Create(parent, configContext, section);

在配置檔案中,我發現一個有趣的現象,add項中的key值為一些不存在類和屬性

Duwamish配置持久化學習筆記

< 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,這樣就可以根據類來對配置進行有效分類,同時,也保證配置結構與上層結構的一緻

Duwamish配置持久化學習筆記

namespace  SystemFramework

Duwamish配置持久化學習筆記
Duwamish配置持久化學習筆記
Duwamish配置持久化學習筆記

{

Duwamish配置持久化學習筆記

     class Tracing

Duwamish配置持久化學習筆記
Duwamish配置持久化學習筆記
Duwamish配置持久化學習筆記

{

Duwamish配置持久化學習筆記
Duwamish配置持久化學習筆記
Duwamish配置持久化學習筆記

          public static bool Enabled

Duwamish配置持久化學習筆記
Duwamish配置持久化學習筆記
Duwamish配置持久化學習筆記

{

Duwamish配置持久化學習筆記
Duwamish配置持久化學習筆記

              get

Duwamish配置持久化學習筆記

{return ApplicationConfiguration.TracingEnabled;}

Duwamish配置持久化學習筆記

          }

Duwamish配置持久化學習筆記
Duwamish配置持久化學習筆記
Duwamish配置持久化學習筆記

     }

Duwamish配置持久化學習筆記

}

最後是我畫的配置持久化模型圖:

Duwamish配置持久化學習筆記

參考:

《Duwamish深入剖析-配置篇》 http://www.aspcool.com/lanmu/browse1.asp?ID=1045&bbsuser=aspnet