通過System.Configuration中的ConfigurationSettings類的AppSettings屬性,可以很方便訪問web.config配置文件中appSettings節點的數據。對于web程序利用這個配置文件存放一些只讀的程序信息,比如程序名稱,作者信息,數據庫連接字符串等將是十分方便有用。如:
<!--Sample.aspx--> private void Page_Load(object sender, System.EventArgs e) { this.tbName = ConfigurationSettings.AppSettings[“AppName“]; }
<!--web.config--> <configuration> <appSettings> <add key="AppName" value="MyApplication" /> </appSettings> ... ...
對于ConfigurationSettings類有個方法GetConfig(string sectionName)可以訪問任何配置元素,對于以上例子,可如此使用:
<!--Sample.aspx--> private void Page_Load(object sender, System.EventArgs e) { object settings = ConfigurationSettings.GetConfig(“appSettings“); NameValueCollection nvc = settings as NameValueCollection; if (nvc != null) { string val = (string)nvc[“AppName“]; this.tbName = val; } }
可見GetConfig()方法返回了一個配置處理的對象,轉換成NameValueCollection的實例后,可以訪問到該section內的內容了。其實對于配置文件檢索有背后的處理程序實現,同時我們可以看到在web.config,或machine.config中看到對于處理程序的聲明,如:
<!--web.config--> <configuration> <configSections> <section name="mySection" type="Chagel.Configration.Settings, Configuration" /> </configSections> <mySection> <AppName> MyApplication</AppName> </mySection> ... ...
以上聲明了一個mySection元素,并在configSections中聲明了該配置的處理程序類名為Chagel.Configration.Settings,Configuration為程序集名稱。接下來我們可以通過一個實現System.Configuration.IConfigurationSectionHandler接口的類來處理該配置元素,如:
<!--Settings.cs--> using Chagel.Configration.Data; namespace Chagel.Configration { public class Settings:IConfigurationSectionHandler { //實現該接口的Create方法 public object Create(object parent, object input, XmlNode node) { Data data = new Data();
foreach(XmlNode xn in node.ChildNodes) { switch(xn.Name) { case("appName"): data.AppName = xn.InnerText; break; case("appVer"): data.AppVer = xn.InnerText; break; ... ... }//switch end }//foreach end
return data;
}//method end } }
IConfigurationSectionHandler 接口只有一種方法,每當發現注冊到處理程序的配置節時,都會在節處理程序上調用 Create 方法,我們實現的類返回一個Data類的實例,該類是一個專門的數據集,代碼如下:
<!--Data.cs--> namespace Chagel.Configration.Data { public class Data { public Data() { } public string AppName;//程序名稱 public string AppVer;//程序版本 public string AppAuthor;//程序作者 ... ... } }
至此,現在可以讀取配置元素值了,如:
<!--Sample1.aspx--> private void Page_Load(object sender, System.EventArgs e) { Data data; data = ConfigurationSettings.GetConfig("mySection") as Data; this.tbName.Text = data.AppName; }
到此我們通過實現一個類支持 IConfigurationSectionHandler 接口來對自定義節進行處理,完成對自定義節的讀取。當然我們仍可以直接聲明系統的處理程序(System.Configuration.NameValueFileSectionHandler)重用與appSettings一樣的類。
|