自定義配置節(jié)點(diǎn)configSections重點(diǎn)_第1頁
自定義配置節(jié)點(diǎn)configSections重點(diǎn)_第2頁
自定義配置節(jié)點(diǎn)configSections重點(diǎn)_第3頁
自定義配置節(jié)點(diǎn)configSections重點(diǎn)_第4頁
自定義配置節(jié)點(diǎn)configSections重點(diǎn)_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、由于最近一個(gè)項(xiàng)目的數(shù)據(jù)庫變動(dòng)比較頻繁, 為了減少數(shù)據(jù)層的負(fù)擔(dān), 打算采用.net的MVC框架, 使用LINQ對付數(shù)據(jù)層.     這個(gè)框架的web.config文件里出現(xiàn)了configSections section, 這個(gè)之前沒有留意, 乘著項(xiàng)目不是很急, 順勢把它給搞懂, 花了一下午時(shí)間, 終于搞定, 有點(diǎn)心得, 寫下來以供面試官翻閱.     為啥要引用configSections?因?yàn)橛脩舻囊恍ο? 可能在config里進(jìn)行配置, 但是config怎么能隨便讓你添加自己的節(jié)點(diǎn)呢! 不行你自己試試, 在任何

2、位置添加任何沒有申明的節(jié)點(diǎn), 系統(tǒng)都不會(huì)讓你通過, 更不會(huì)讓你去讀它了, 當(dāng)然, 你打算在別的xml文件里添加節(jié)點(diǎn), 然后讀出來, 創(chuàng)建對象, 這個(gè)沒問題. 為了系統(tǒng)能有組織的管理用戶的在配置文件里的自定義信息, 就要使用configSections了, 分3步走:  1. 創(chuàng)建一個(gè)實(shí)現(xiàn)IConfigurationSectionHandler的類   2. 在config文件里添加如下節(jié)點(diǎn):   <configuration>        &

3、#160;     <configSections>                   <section name="NameM" type="LearningConfiguration.NameSectionHandler"/>       

4、       </configSections>              <NameM>                   <Add key="name1" firs

5、tname="Jim" lastname="w1"/>                   <Add key="name2" firstname="Chris" lastname="w2"/>         &

6、#160;     </NameM>            說明: 在configSections下添加一個(gè)section子節(jié)點(diǎn), 寫好標(biāo)示名和類型, 然后在緊接這下面實(shí)現(xiàn)這個(gè)標(biāo)示名的細(xì)節(jié)內(nèi)容,就是我們當(dāng)初想添加的自己的自定義信息了.           3. 實(shí)現(xiàn)IConfigurationSectionHandler唯一的方法: p

7、ublic object Create(object parent, object configContext, XmlNode section), 這里的最后一個(gè)參數(shù)就是自定義信息那個(gè)節(jié)點(diǎn)了, 粗體部分. 通過處理這堆信息, 返回你要的對象.        4. 使用這個(gè)返回的對象,通過System.Configuration.ConfigurationManager.GetSection()方法. 以下是示例代碼:(NameSectionHandler.cs)Code(NameManagement.c

8、s)namespace LearningConfiguration    public class NameManagement            string _firstName;        public string FirstName    &

9、#160;               get  return this._firstName;             set  this._firstName = value;      

10、;           string _lastName;        public string LastName                    get &#

11、160;return this._lastName;             set  this._lastName = value;                 public NameManagement(string fi

12、rstName, string lastName)                    this.FirstName = firstName;            this.LastName = lastName;&

13、#160;               public string RetrieveFullName()                    return string.Format("0 1&qu

14、ot;, this.FirstName, this.LastName);            (Default.aspx.cs)namespace LearningConfiguration    public partial class _Default : System.Web.UI.Page     

15、       protected void Page_Load(object sender, EventArgs e)                    Dictionary<string, NameManagement> names 

16、;= ConfigurationManager.GetSection("NameM") as Dictionary<string, NameManagement>            if (names != null)             

17、                foreach(string key in names.Keys)                          

18、          NameManagement name = nameskey as NameManagement;                    Response.Write(name.RetrieveFullName(); &

19、#160;                                       與以上調(diào)用方式一樣:Code 1.為什么需要自定義節(jié)點(diǎn)為了增加應(yīng)用程序的可移植性,通常網(wǎng)站需要配置一些自定義的節(jié)

20、點(diǎn),例如:文件上傳的路徑等,再深入的應(yīng)用,可以定義工廠方法需要?jiǎng)?chuàng)建的類。 2.configSections使用方法configSections節(jié)點(diǎn)下定義自定義節(jié)點(diǎn)可以幫我們實(shí)現(xiàn)我們自己的節(jié)點(diǎn)。首先定義自己的節(jié)點(diǎn),定義方法如下:<configSections>    <sectionGroup name="section group name">        <section name="section name"

21、type="configuration section handler class" />    </sectionGroup></configSections>定義自己的節(jié)點(diǎn)必須在configSections節(jié)點(diǎn)。sectionGroup 元素充當(dāng) section 元素的容器。section 元素將配置節(jié)處理程序與配置元素或節(jié)關(guān)聯(lián)。由于 ASP.NET 不對如何處理配置文件內(nèi)的設(shè)置作任何假設(shè),因此這非常必要。但 ASP.NET 會(huì)將配置數(shù)據(jù)的處理委托給配置節(jié)處理程序,(稍候說明。)每個(gè) section 元素均標(biāo)識(shí)

22、一個(gè)配置節(jié)或元素??梢栽?sectionGroup 元素中對 section 元素進(jìn)行邏輯分組,以對 section 元素進(jìn)行組織并避免命名沖突。section 和 sectionGroup 元素包含在 configSections 元素中。sectionGroup節(jié)點(diǎn)屬性:name:必選的 String 屬性,這是 group 元素在配置文件的節(jié)設(shè)置區(qū)域中使用的名稱。section節(jié)點(diǎn)屬性:name:必選的 String 屬性,指定與 type 屬性中指定的配置節(jié)處理程序關(guān)聯(lián)的配置節(jié)或元素的名稱。這是該元素在配置文件的節(jié)設(shè)置區(qū)域中使用的名稱。type:必選的 String 屬性,指定用來執(zhí)行

23、如下操作的配置節(jié)處理程序類的名稱:處理在 name 屬性中指定的節(jié)或元素中的配置設(shè)置。 現(xiàn)在定義好了自己的節(jié)點(diǎn),可以使用該節(jié)點(diǎn)了。使用方法如下:<section group name>    <section name>        <add key="key1" value="value1" />    </section name></section gro

24、up name>定義好了自己的節(jié)點(diǎn),如何讀取節(jié)點(diǎn)信息呢?以下是msdn上的原話:您可以用自己的 XML 配置元素來擴(kuò)展標(biāo)準(zhǔn)的 ASP.NET 配置設(shè)置集。若要完成該操作,您必須創(chuàng)建自己的配置節(jié)處理程序。該處理程序必須是一個(gè)實(shí)現(xiàn) System.Configuration.IConfigurationSectionHandler 接口或 System.Configuration.ConfigurationSection 類的 .NET Framework 類。節(jié)處理程序解釋并處理 Web.config 文件特定部分中 XML 配置元素中定義的設(shè)置,并根據(jù)配置設(shè)置返回適當(dāng)?shù)呐渲脤ο?。處理程序?/p>

25、返回的配置對象可以是任何數(shù)據(jù)結(jié)構(gòu);它不限于任何基配置類或配置格式。ASP.NET 使用該配置對象,以對自定義配置元素進(jìn)行讀取和寫入。上面這段話的意思就是說,我們要定義一個(gè)類,這個(gè)類要繼承自System.Configuration.IConfigurationSectionHandler 接口或 System.Configuration.ConfigurationSection 類。然后用這個(gè)類來處理我們自定義的節(jié)點(diǎn)。我們看到System.Configuration.IConfigurationSectionHandler接口中,只有一個(gè)方法:/創(chuàng)建配置節(jié)處理程序Object Create (O

26、bject parent, Object configContext, XmlNode section)返回值創(chuàng)建的節(jié)處理程序?qū)ο蟆?#160;這個(gè)類是干什么用的呢?讓我們通過一個(gè)例子來看看。 首先,我們新建一個(gè)網(wǎng)站項(xiàng)目,并在web.config中加入以下節(jié)點(diǎn):<configSections>    <sectionGroup name="WebSiteInfo">        <section name="basicInf

27、o" type="ConfigurationSectionTest.WebSiteInfoHandler"/>        <section name="fileUpload" type="ConfigurationSectionTest.WebSiteInfoHandler"/>    </sectionGroup></configSections><WebSiteInfo&

28、gt;    <basicInfo>        <add key="name" value="huchen's homepage"/>        <add key="version" value="1.0"/>    </basicInfo> &

29、#160;  <fileUpload>        <add key="fileUploadPath" value="E:MyHomePageWebUpload"/>        <add key="fileUploadSizeMax" value="2M"/>    </fileUpload

30、></WebSiteInfo>以上我們在WebSiteInfo節(jié)點(diǎn)下定義了兩個(gè)節(jié)點(diǎn)basicInfo和fileUpload,并定義了節(jié)點(diǎn)處理程序類ConfigurationSectionTest.WebSiteInfoHandler,并且隨后運(yùn)用了我們定義的節(jié)點(diǎn)。我們來看看節(jié)點(diǎn)處理程序ConfigurationSectionTest.WebSiteInfoHandler。任意建立一個(gè)項(xiàng)目,新建一個(gè)類,或者直接在App_Code里新建一個(gè)類,如下:并在Create函數(shù)中設(shè)置一個(gè)斷點(diǎn)。  namespace ConfigurationSectionTest&#

31、160;   / <summary>    /WebSiteInfoHandler 的摘要說明    / </summary>    public class WebSiteInfoHandler : IConfigurationSectionHandler            public WebSiteInfoHandler()  

32、60;                 /            /TODO: 在此處添加構(gòu)造函數(shù)邏輯            /         &#

33、160;      #region IConfigurationSectionHandler 成員        public object Create(object parent, object configContext, System.Xml.XmlNode section)                 &

34、#160; /這里我們首先返回個(gè)hello,并且在此處設(shè)置一個(gè)斷點(diǎn)??纯闯绦蚴裁磿r(shí)候執(zhí)行到這。            return "hello"                #endregion    然后在Default.aspx的Page_Load事件處理程序中去訪問我們自定義的節(jié)點(diǎn),并在C

35、onfigurationSettings.GetConfig("WebSiteInfo/basicInfo"); 這條語句上設(shè)置斷點(diǎn)。protected void Page_Load(object sender, EventArgs e)    Object o = ConfigurationSettings.GetConfig("WebSiteInfo/basicInfo"); 好了,我們啟動(dòng)調(diào)試,看到程序首先執(zhí)行到ConfigurationSettings.GetConfig("WebSiteInfo

36、/basicInfo");這句。然后執(zhí)行到ConfigurationSectionTest.WebSiteInfoHandler中的Create函數(shù)。我們再看看這時(shí)處理函數(shù)中參數(shù)的值:parent為nullconfigContext 為配置上下文對象。section 的InnerXml為<add key="name" value="huchen's homepage" /><add key="version" value="1.0" /> 按F11繼續(xù)執(zhí)行return "hello", 繼續(xù)執(zhí)行.在執(zhí)行到Object o = ConfigurationSettings.GetConfig("WebSiteInfo/basicInfo")后面的“,我們發(fā)現(xiàn)o的值為”hello”。 相信您已經(jīng)明白的差不多了,當(dāng)讀取自定義節(jié)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論