繼前一篇文章:"不要再賴在 appSettings 的屋簷下了,寫個自己的 Configuration 區段吧~" 之後,也許你已經著手,或已經將自己的設定值移到了自己的 section 中,但現在又有一個問題,就是:如果是不用模組的 section,全擠在同一個 section 中很難看,也不容易找。那麼,本文將可以幫助你。
繼前一篇文章:不要再賴在 appSettings 的屋簷下了,寫個自己的 Configuration 區段吧~ 之後,也許你已經著手,或已經將自己的設定值移到了自己的 section 中,但現在又有一個問題,就是:如果是不用模組的 section,全擠在同一個 section 中很難看,也不容易找。那麼,本文將可以幫助你。
如果你看過 ASP.NET 的 Web.config,應該會注意到預設的組態是有 Group 的,例如:
那我們是否也可以自己建一個 Section Group?答案當然是肯定的。
要作為 Configuration 的 SectionGroup 的類別,必須要繼承自 System.Configuration 命名空間(內含於組件 System.Configuration.dll)的 ConfigurationSectionGroup 類別,例如我可以這樣寫:
在程式碼中,要包在 SectionGroup 的區段,要在 SectionGroup 中以屬性來呈現,並且由 ConfigurationSectionGroup.Sections 屬性中以字串鍵值(與ConfigurationProperty宣告相同)來取由 ConfigurationSection 物件,你可以利用 as 直接轉型成自己的 Section 物件。
然後,在 Web.config 中就可以放:
在這裡要注意一下,type 的設定如果是在 Web 網站專案,直接給型別名稱即可,但若是 Web 應用程式專案,則要連同命名空間一起給,否則 ASP.NET 會無法找到該型別資訊。
接著再於 Web.config 中設定其組態值:
然後,建立一個測試用的 ASP.NET Web Form,填入下列的程式碼:
這段程式碼中也許你會注意到 mySectionGroup/mySection1 這樣的路徑,這是 ASP.NET 組態系統所定義的規則,如果你是用 Group 組織你的 section 的話,要用 [group_name]/[section_name] 的方式給值,這樣 ConfigurationManager.GetSection() 才會取的到你要的 Section。(請注意:ConfigurationManager 中沒有 GetSectionGroup 方法,所以你只能取 Section)
編譯執行此專案,則你應該會看到這樣的訊息: