Duwamish配置持久化学习笔记
生活随笔
收集整理的這篇文章主要介紹了
Duwamish配置持久化学习笔记
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
在學(xué)習(xí)了Duwamish和.Text的配置方法后,對(duì)兩者的配置持久化做一個(gè)比較。
以ApplicationConfiguration為例,Duwamish的配置文件中的<ApplicationConfiguration>...</ApplicationConfiguration>部分對(duì)應(yīng)于Duwamish.SystemFramework.ApplicationConfiguration類(lèi),
??<configSections>
????<section?name="ApplicationConfiguration"?type="Duwamish7.SystemFramework.ApplicationConfiguration,?Duwamish7.SystemFramework"?/>
??? ...
??</configSections>
??? ...
??<ApplicationConfiguration>
????<add?key="SystemFramework.Tracing.Enabled"?value="False"?/>
????<add?key="SystemFramework.Tracing.TraceFile"?value="C:\Program?Files\Microsoft?Visual?Studio?.NET?2003\Enterprise?Samples\Duwamish?7.0?CS\.\DuwamishTrace.txt"?/>
????<add?key="SystemFramework.Tracing.TraceLevel"?value="4"?/>
????<add?key="SystemFramework.Tracing.SwitchName"?value="DuwamishTraceSwitch"?/>
????<add?key="SystemFramework.Tracing.SwitchDescription"?value="Error?and?information?tracing?for?Duwamish"?/>
????<add?key="SystemFramework.EventLog.Enabled"?value="True"?/>
????<add?key="SystemFramework.EventLog.Machine"?value="."?/>
????<add?key="SystemFramework.EventLog.SourceName"?value="Duwamish7"?/>
???<add?key="SystemFramework.EventLog.LogLevel"?value="1"?/>
??</ApplicationConfiguration>
ApplicationConfiguration類(lèi)實(shí)現(xiàn)了System.Configuration.IConfigurationSectionHandler接口,需要實(shí)現(xiàn)一個(gè)create()方法,該方法將在調(diào)用System.Configuration.GetConfig()方法時(shí)自動(dòng)被調(diào)用。在ApplicationConfiguration中有大量的private變量和與這些變量相對(duì)應(yīng)的靜態(tài)public屬性,但這些public屬性?xún)H實(shí)現(xiàn)了get{},而不實(shí)現(xiàn)set{}。例如,TracingEnabled屬性的實(shí)現(xiàn):
public?static?bool?TracingEnabled
{
??? get
???{
??????return?tracingEnabled;
???}
}
其中,tracingEnabled為ApplicationConfiguration的私有變量。
另外,在ApplicationConfiguration類(lèi)中還實(shí)現(xiàn)了一個(gè)ReadSetting方法,共有四個(gè)重載函數(shù),分別提供int,string, bool, TraceLevel四種不同配置類(lèi)型的設(shè)置讀取功能。以下為讀取string類(lèi)型的ReadSetting的實(shí)現(xiàn)
????????public?static?String?ReadSetting(NameValueCollection?settings,?String?key,?String?defaultValue)
????????{
????????????try
????????????{
????????????????Object?setting?=?settings[key];
????????????????
????????????????return?(setting?==?null)???defaultValue?:?(String)setting;
????????????}
????????????catch
????????????{
????????????????return?defaultValue;
????????????}
????????}
另一個(gè)重要方法是OnApplicationStart(),它是一個(gè)靜態(tài)方法,在Global.asa中的Application_Start()事件中被調(diào)用,用于在web站點(diǎn)被訪問(wèn)前,將設(shè)置讀入System.Configuration.ConfigurationSettings中,而ReadSetting方法正是從ConfigurationSettings中讀出設(shè)置的。ReadSetting的參數(shù)settings是通過(guò)baseHandler.Create()方法獲得ConfigurationSettings的引用的,如下所示
????????????NameValueSectionHandler?baseHandler?=?new?NameValueSectionHandler();
????????????????settings?=?(NameValueCollection)baseHandler.Create(parent,?configContext,?section);
在配置文件中,我發(fā)現(xiàn)一個(gè)有趣的現(xiàn)象,add項(xiàng)中的key值為一些不存在類(lèi)和屬性
<add?key="SystemFramework.Tracing.Enabled"?value="False"?/> 在以上代碼中,SystemFramework.Tracing根本不存在,更不用說(shuō)Enabled屬性了。實(shí)際上,這個(gè)key僅僅用于標(biāo)識(shí)變量,如果要讀取這個(gè)設(shè)置就可以用ReadSetting(settings,"SystemFramework.Tracing.Enabled",defaultValue)完成,而從web頁(yè)中讀取這個(gè)設(shè)置則可以用SystemFramework.ApplicationConfiguration.TracingEnabled靜態(tài)屬性。
如果我們想使配置文件與上層的類(lèi)相對(duì)應(yīng),可以考慮創(chuàng)建一個(gè)SystemFramework.Tracing類(lèi)(見(jiàn)下圖),并加入Enabled屬性,然后在Enabled屬性中調(diào)用SystemFramework.ApplicationConfiguration.TracingEnabled,這樣就可以根據(jù)類(lèi)來(lái)對(duì)配置進(jìn)行有效分類(lèi),同時(shí),也保證配置結(jié)構(gòu)與上層結(jié)構(gòu)的一致
namespace?SystemFramework
{
?????class?Tracing
?????{
??????????
??????????public?static?bool?Enabled
??????????{
??????????????get{return?ApplicationConfiguration.TracingEnabled;}
??????????}
??????????
?????}
}
最后是我畫(huà)的配置持久化模型圖:
?
參考:
《Duwamish深入剖析-配置篇》http://www.aspcool.com/lanmu/browse1.asp?ID=1045&bbsuser=aspnet
以ApplicationConfiguration為例,Duwamish的配置文件中的<ApplicationConfiguration>...</ApplicationConfiguration>部分對(duì)應(yīng)于Duwamish.SystemFramework.ApplicationConfiguration類(lèi),
??<configSections>
????<section?name="ApplicationConfiguration"?type="Duwamish7.SystemFramework.ApplicationConfiguration,?Duwamish7.SystemFramework"?/>
??? ...
??</configSections>
??? ...
??<ApplicationConfiguration>
????<add?key="SystemFramework.Tracing.Enabled"?value="False"?/>
????<add?key="SystemFramework.Tracing.TraceFile"?value="C:\Program?Files\Microsoft?Visual?Studio?.NET?2003\Enterprise?Samples\Duwamish?7.0?CS\.\DuwamishTrace.txt"?/>
????<add?key="SystemFramework.Tracing.TraceLevel"?value="4"?/>
????<add?key="SystemFramework.Tracing.SwitchName"?value="DuwamishTraceSwitch"?/>
????<add?key="SystemFramework.Tracing.SwitchDescription"?value="Error?and?information?tracing?for?Duwamish"?/>
????<add?key="SystemFramework.EventLog.Enabled"?value="True"?/>
????<add?key="SystemFramework.EventLog.Machine"?value="."?/>
????<add?key="SystemFramework.EventLog.SourceName"?value="Duwamish7"?/>
???<add?key="SystemFramework.EventLog.LogLevel"?value="1"?/>
??</ApplicationConfiguration>
ApplicationConfiguration類(lèi)實(shí)現(xiàn)了System.Configuration.IConfigurationSectionHandler接口,需要實(shí)現(xiàn)一個(gè)create()方法,該方法將在調(diào)用System.Configuration.GetConfig()方法時(shí)自動(dòng)被調(diào)用。在ApplicationConfiguration中有大量的private變量和與這些變量相對(duì)應(yīng)的靜態(tài)public屬性,但這些public屬性?xún)H實(shí)現(xiàn)了get{},而不實(shí)現(xiàn)set{}。例如,TracingEnabled屬性的實(shí)現(xiàn):
public?static?bool?TracingEnabled
{
??? get
???{
??????return?tracingEnabled;
???}
}
其中,tracingEnabled為ApplicationConfiguration的私有變量。
另外,在ApplicationConfiguration類(lèi)中還實(shí)現(xiàn)了一個(gè)ReadSetting方法,共有四個(gè)重載函數(shù),分別提供int,string, bool, TraceLevel四種不同配置類(lèi)型的設(shè)置讀取功能。以下為讀取string類(lèi)型的ReadSetting的實(shí)現(xiàn)
????????public?static?String?ReadSetting(NameValueCollection?settings,?String?key,?String?defaultValue)
????????{
????????????try
????????????{
????????????????Object?setting?=?settings[key];
????????????????
????????????????return?(setting?==?null)???defaultValue?:?(String)setting;
????????????}
????????????catch
????????????{
????????????????return?defaultValue;
????????????}
????????}
另一個(gè)重要方法是OnApplicationStart(),它是一個(gè)靜態(tài)方法,在Global.asa中的Application_Start()事件中被調(diào)用,用于在web站點(diǎn)被訪問(wèn)前,將設(shè)置讀入System.Configuration.ConfigurationSettings中,而ReadSetting方法正是從ConfigurationSettings中讀出設(shè)置的。ReadSetting的參數(shù)settings是通過(guò)baseHandler.Create()方法獲得ConfigurationSettings的引用的,如下所示
????????????NameValueSectionHandler?baseHandler?=?new?NameValueSectionHandler();
????????????????settings?=?(NameValueCollection)baseHandler.Create(parent,?configContext,?section);
在配置文件中,我發(fā)現(xiàn)一個(gè)有趣的現(xiàn)象,add項(xiàng)中的key值為一些不存在類(lèi)和屬性
<add?key="SystemFramework.Tracing.Enabled"?value="False"?/> 在以上代碼中,SystemFramework.Tracing根本不存在,更不用說(shuō)Enabled屬性了。實(shí)際上,這個(gè)key僅僅用于標(biāo)識(shí)變量,如果要讀取這個(gè)設(shè)置就可以用ReadSetting(settings,"SystemFramework.Tracing.Enabled",defaultValue)完成,而從web頁(yè)中讀取這個(gè)設(shè)置則可以用SystemFramework.ApplicationConfiguration.TracingEnabled靜態(tài)屬性。
如果我們想使配置文件與上層的類(lèi)相對(duì)應(yīng),可以考慮創(chuàng)建一個(gè)SystemFramework.Tracing類(lèi)(見(jiàn)下圖),并加入Enabled屬性,然后在Enabled屬性中調(diào)用SystemFramework.ApplicationConfiguration.TracingEnabled,這樣就可以根據(jù)類(lèi)來(lái)對(duì)配置進(jìn)行有效分類(lèi),同時(shí),也保證配置結(jié)構(gòu)與上層結(jié)構(gòu)的一致
namespace?SystemFramework
{
?????class?Tracing
?????{
??????????
??????????public?static?bool?Enabled
??????????{
??????????????get{return?ApplicationConfiguration.TracingEnabled;}
??????????}
??????????
?????}
}
最后是我畫(huà)的配置持久化模型圖:
?
參考:
《Duwamish深入剖析-配置篇》http://www.aspcool.com/lanmu/browse1.asp?ID=1045&bbsuser=aspnet
轉(zhuǎn)載于:https://www.cnblogs.com/tonyqus/archive/2004/12/11/75725.html
總結(jié)
以上是生活随笔為你收集整理的Duwamish配置持久化学习笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Vue中message.split().
- 下一篇: js中使用shiro标签的一个小坑