




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專題5.3 平面向量的數(shù)量積(原卷版)-2024年高考數(shù)學(xué)一輪復(fù)習(xí)精講精練寶典(新高考專用)
- 幼兒游戲教學(xué)案例
- 人教版(2024)七年級(jí)英語下冊Unit 6 學(xué)情調(diào)研測試卷(含答案)
- 路基拼寬施工方案
- 隧道風(fēng)機(jī)房施工方案
- 2025年新高考地理全真模擬試卷4(含答案解析)
- 2025年高考地理二輪復(fù)習(xí):綜合題答題技巧(含練習(xí)題及答案)
- 幕墻防火防雷施工方案
- Unit 6 reading2 教學(xué)設(shè)計(jì) 2024-2025學(xué)年譯林版(2024)七年級(jí)英語上冊
- 小學(xué)課本劇一年級(jí)《小白兔和小灰兔》-劇本
- 高中通用技術(shù)人教高二下冊目錄新型抽紙盒-
- 畜牧場經(jīng)營管理
- 課程思政示范課程申報(bào)書(測繪基礎(chǔ))
- ALeader 阿立得 ALD515使用手冊
- 神華陜西國華錦界電廠三期工程環(huán)評(píng)報(bào)告
- 飛行員航空知識(shí)手冊
- GB/Z 19848-2005液壓元件從制造到安裝達(dá)到和控制清潔度的指南
- GB/T 34936-2017光伏發(fā)電站匯流箱技術(shù)要求
- GB/T 12618.4-2006開口型平圓頭抽芯鉚釘51級(jí)
- 紅金大氣商務(wù)風(fēng)領(lǐng)導(dǎo)歡迎會(huì)PPT通用模板
- 學(xué)前教育學(xué)00383-歷年真題-試卷
評(píng)論
0/150
提交評(píng)論