在.net應用中,配置資訊以XML文檔的形式來存儲。依.net的慣例,web.config為Asp.net應用(包括Web Service應用)提供配置資訊;而*.exe.config為可執行的應用(包括控制台、Windows服務、Windows桌面應用程式)提供配置資訊,其中的“*”代表易用的程式集名稱,例如App.exe程式集的對應配置檔案為App.exe.config。
1、使用預設方法讀取
在代碼中使用System.Configuration名稱空間中的ConfigurationManager即可友善地對配置進行讀取(1.1版使用ConfigurationSettings),比如,用如下代碼就可以讀取一條配置資訊:

string portNumber = ConfigurationManager.AppSettings["PortNumber"];
這段代碼讀取配置檔案AppSetting段中的如下資訊:

<appSettings>

<add key="PortNumber" value="4532"/>

</appSettings>
确實夠簡單,但是如果我的配置資訊更為複雜呢,比如說分為如下的層次:

<Servers>

<DbServer>

<Address>10.1.1.1</Address>

<PortNumber>9797</PortNumber>

</DbServer>

<AppServer>

<Address>10.1.1.2</Address>

<PortNumber>5203</PortNumber>

</AppServer>

</Servers>
那邊某君回答:“這照樣可以一字排開啊”--那麼層次更加複雜的呢?嘿嘿,沒招了吧。當然有招,我們可以建立強類型的讀取類來處理,任你多麼複雜也不在話下,哼哼。
2、使用強類型來讀取
在.net中,配置檔案中的所有資訊都經由IconfigurationSectionHandler接口讀出。該接口隻有一個方法:

object Create (object parent, object configContext, XmlNode section)
通過這個方法,IconfigurationSectionHandler接口讀取資訊并把它們轉換成程式易于使用的形式。
首先讓我們來看一個簡單的配置檔案:

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<configSections>

<section name="DbServer" type=""/>

<section name="AppServer" type=""/>

</configSections>

<!--上面是段處理器部分-->

<!--下面是段内容部分-->

<appSettings>

<add key="PortNumber" value="4532"/>

</appSettings>


<Address>10.1.1.1</Address>

<PortNumber>9797</PortNumber>



<Addr>10.1.1.2</Addr>

<Port>5203</Port>


</configuration>
如上面所示,除根節點(<configuration>)外,配置資料分為兩部分:段處理器(section handler,指節點<configSections>中的所有内容)部分和段内容(section,除<configSections>節點外的内容)部分。
段處理器部分為給段的内容制定相應的資料處理類,即在<section>節點中,type屬性描述的類(前面為包括名稱空間的類名,後面為程式集名,使用逗号分隔)被指定用于處理name屬性描述的段内容。
那麼,段處理器如何處理相應段的内容呢?原來,<configSections>定義的每一個處理器類都必須實作IconfigurationSectionHandler接口,當執行下列代碼時,CLR将通過兩個步驟獲得一個處理器:

object DbServerConfig = ConfigurationManager.GetSection("DbServer");
首先,CLR在配置檔案的段處理器部分找到與“DbServer”相應的段處理器描述,并通過反射機制建立一個處理器對象;然後調用處理器對象的Create方法并傳入3個參數,其中第3個參數包含了該段内容的XML資訊(在我們的例子中就是DbServer節點下的所有内容),然後傳回Create的傳回值。
那我們這就是建立一個簡單的段處理器類吧

using System;

using System.Configuration;

using System.Xml;


namespace SimpleConfig
{
public class DbServerConfig : IConfigurationSectionHandler
{
private string address;
public string Address
{
get { return address; }
}
private int portNumber;
public int PortNumber
get { return portNumber; }
public object Create(object parent, object configContext, XmlNode section)
foreach (XmlNode node in section.ChildNodes)
{
switch (node.Name)
{
case "Address": address = node.InnerText; break;
case "PortNumber": portNumber = Convert.ToInt32(node.InnerText); break;
}
}
return this;
}
}

接着,把段處理器部分的

<section name="DbServer" type=""/>
改為

<section name="DbServer" type="SimpleConfig.DbServerConfig, SimpleConfig"/>
就可以使用下面的語句來讀取配置檔案中的内容了:

object o = ConfigurationManager.GetSection("DbServer");

DbServerConfig dbServerConfig = (DbServerConfig)o;

textBox1.Text = dbServerConfig.Address;

textBox2.Text = dbServerConfig.PortNumber.ToString();
本文轉自高海東部落格園部落格,原文連結:http://www.cnblogs.com/ghd258/archive/2005/11/27/285580.html,如需轉載請自行聯系原作者