自定義配置節點(一)

      配置文件在.net應用開發中確實是個比較好的東西。有了它,咱們在開發的過程當中能夠省不少事。這篇文章主要的是講怎麼讀取簡單的自定義配置節點。web

      首先來說下基本知識。Asp.net中的配置是使用一個XML格式的配置文件來管理的。該文件能夠包含應用程序須要的信息,也能夠包含自定義的信息。配置文件分爲機器級配置文件、應用程序級配置文件、文件夾級配置文件。機器級別的好比:C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config 文件夾中的machine.config 和web.config。應用程序級和文件夾級的應該好理解,通常開發項目中用的多。編程

      ASP.NET使用一種多層配置系統,容許開發人員在不一樣的級別添加配置信息。在運行時,配置被應用的順序爲:應用默認的machine.config,應用來自計算機的web.config,程序根目錄下的web.config,文件夾下的web.config。服務器

     關於web.config中一些節點的做用我這裏就不講了。web.config文件的編程讀取。在讀取<connenctionStrings>和<appSettings>節點能夠用System.Configuration.ConfigurationManger。但若是要修改web.config的時候,就必須用System.Web.Configuration.WebConfigurationManager。WebConfigurationManager 主要成員以下:app

   Appsettings屬性:提供訪問添加到應用程序配置文件<appSettings>配置節點中自定義的信息。tcp

   ConnectionStrings屬性:提供訪問配置文件中<connectionStrings>節中的數據,能夠由名稱索引來訪問單獨的連接字符串。ide

   OpenWebConfiguration方法:返回指定應用程序中配置信息的Configuration對象。網站

   OpenMachineConfiguration 方法:返回machine.config中配置信息的Configuration對象。ui

   儘管使用<appSettings>元素能夠存儲自定義信息,可是該元素具備限制:該配置節點不能存儲結構化的信息。spa

   假定要將幾個相關的設置組合在一塊兒,使應用程序獲知如何聯繫一個遠程對象,好比指定一個端口號、服務器位置、URL及用戶驗證信息。首先建立一個網站,打開根目錄下web.config文件,在<configuration>節點中添加.net

1 <RemotingObject available="true" pollTimeout="00:01:00" location="tcp://OrderComputer:8010/OrderService" ></RemotingObject>
RemotingObject

    要實現這個結構,咱們須要定義一個相匹配的類,該類派生自System.Configuration.ConfigurationSection。在網站中添加System.Configuration程序集。而後在App_Code文件夾下添加RemotingObject類。代碼以下

 1 using System;
 2 using System.Configuration;
 3 
 4 /// <summary>
 5 /// RemotingObject 的摘要說明
 6 /// </summary>
 7 public class RemotingObject:ConfigurationSection
 8 {
 9 
10     [ConfigurationProperty("available", IsRequired = false, DefaultValue = true)]
11     public bool Available
12     {
13         get { return (bool)base["available"]; }
14         set { base["available"] = value; }
15     }
16 
17     [ConfigurationProperty("pollTimeout", IsRequired = true)]
18     public TimeSpan PollTimeout
19     {
20         get { return (TimeSpan)base["pollTimeout"]; }
21         set
22         {
23             base["pollTimeout"] = value;
24         }
25     }
26 
27     [ConfigurationProperty("location", IsRequired = true)]
28     public string Location
29     {
30         get { return (string)base["location"]; }
31         set { base["location"] = value; }
32     }
33 }
RemotingObject類

  代碼中每一個屬性都使用ConfigurationProperty Attribute 映射到相應的<RemotingObejct>節點的屬性名稱。若是自定義配置節點添加了一個屬性,可是沒有包含匹配的ConfigurationProperty特性的話,那麼運行時有拋出一個異常。

   建立完後,在web.config配置文件中的<configSections>區塊中添加一個<section>,代碼以下

1   <section name="RemotingObject" type="RemotingObject"/>
section

   最後咱們就可使用代碼來從自定義的配置節點中獲取信息了。代碼以下

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.UI;
 6 using System.Web.UI.WebControls;
 7 using System.Configuration;
 8 using System.Web.Configuration;
 9 
10 public partial class _Default : Page
11 {
12     protected void Page_Load(object sender, EventArgs e)
13     {
14         System.Configuration.Configuration config = WebConfigurationManager.OpenWebConfiguration("~/");
15         RemotingObject custSection = (RemotingObject)config.GetSection("RemotingObject");
16         Label1.Text += "獲取自定義配置節點的信息...<br/>" +
17             "<b>位置</b>" + custSection.Location +
18             "<br/><b>是否可用:</b>" + custSection.Available.ToString() +
19             "<br/> <b>超時時間:</b>" + custSection.PollTimeout.ToString() + "<br/><br/>";
20     }
21 }
Test

 注意加命名空間:using System.Web.Configuration;運行效果以下

 總結:要擴展一個配置文件須要三個步驟

  1.決定想要在配置文件中存儲的信息及如何將這些信息組織爲元素和屬性。

  2.對於每個新元素,建立一個C#類來封裝信息。

  3.向配置文件中註冊新的配置塊,須要使用<configSection>元素。

相關文章
相關標籤/搜索