久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

應用程序配置和動態(tài)加載7

 凱之風 2011-06-03

自定義應用程序配置

為了讓自己編寫的程序更加具有靈活性,往往需要把一些信息放置到程序的外部,,等到程序運行時,,根據(jù)讀入的數(shù)據(jù)的不同,可能讓程序具有不同的表現(xiàn),。存放這些信息的文件就稱為應用程序的配置文件,,有的人將配置信息寫入ini的文件中,有的應用程序把這些信息寫入數(shù)據(jù)庫,。在.Net中,,一般采用標準的XML文件作為配置文件。不同的應用程序配置文件的名稱不同,。在.Netweb程序的配置文件一般叫web.config,,應用程序的配置文件一般叫app.config

由于配置文件就是一個XML文件所以稱文件中的每一個結點為元素,。每個XML中的元素都對應一個配置信息,,所以又稱元素在配置信息中為配置元素,如果一個配置元素中還包含其他的配置元素,,那么就稱這個配置元素為配置節(jié),。

下面具體看一個.Net中具體使用的配置文件,觀察一下配置文件的格式,。為了能讓大家看清楚配置文件的組成,,對文中的一些內容進行了省略,用“…”來表示,。

<?xml version="1.0"?>

<configuration>

       <configSections>

                            <section name="script" type="...ScriptingSection"/>

                            <sectionGroup name="webServices" type="...SectionGroup">                                      <section name="roleService" type="...Section"/>

                        </sectionGroup>

       </configSections>

       <appSettings>

              <add key="DAL" value="SQLDAL"/>

              <add key="BLL" value="BLL"/>

       </appSettings>

       <connectionStrings>

              <add name="northWindConnectionString" connectionString="Data ..." />

       </connectionStrings>

</configuration>

從上面可以看出,,一個配置文件具有根元素configuration,與命名空間System.Configuration中的類Configuration相對應,。在根元素configuration中包含的內容一般分為兩個部分,。第一部分位于configSections中,稱為配置節(jié)的聲明部分,。剩下的部分就稱為配置節(jié)區(qū)域,,里面包含有很多的配置信息,每一個配置信息,,稱為一個配置元素或者配置節(jié),,配置節(jié)還可以包含配置節(jié),。像上面文件中

       <appSettings>

              <add key="DAL" value="SQLDAL"/>

              <add key="BLL" value="BLL"/>

       </appSettings>

就是一個配置元素,。相對應的connectionStrings是另外的一個配置元素,。在配置文件中配置區(qū)域的每一個配置元素或者配置節(jié)都需要在configSections先聲明,然后在后面的配置信息中才能使用,。否則,,程序會提示“不能識別的配置元素”的提示。這個就像編程中使用的變量首先要聲明一樣,。

配置節(jié)的聲明部分,,比如<section name="script" type="...ScriptingSection"/>中,name就表示下面將要使用到的配置節(jié)的名稱,。type就表示對這個配置信息的處理程序,,如果使用的程序集是私有程序集時 type通常由兩部分組成,由逗號“,”分隔,,前半部分是類型名稱,,后半部分是程序集名稱。如果是公有程序集(),,則需要提供publicKey,。比如一個使用了強命名程序集的完整聲明為:<section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

configSections.NET Framework中的configSections元素相對應,在configSections元素中可以包含在表11-5中列出的子元素,。

元素的名稱

說明

clear

移除對繼承的節(jié)和節(jié)組的所有引用

remove

移除對繼承的節(jié)和節(jié)組的引用

section

定義配置節(jié)處理程序與配置元素之間的關聯(lián)

sectionGroup

定義配置節(jié)處理程序與配置節(jié)之間的關聯(lián)

如果配置文件中包含 configSections 元素,,則 configSections 元素必須是 configuration 元素的第一個子元素。

在配置文件中的配置節(jié)在System.Configuration命名空間中有相應的類與之對應,,這樣做的目的是提供對這些節(jié)的操作,,configuration與類Configuration相對應,配置節(jié)對應的類使用ConfigurationSection類來表示,??梢允褂迷擃愄峁┑?/span>GetSection或者GetSectionGroup方法來讀取配置文件中的信息。而ConfigurationManager類封裝了對這些配置節(jié)的操作,,并且該類還具有兩個屬性,AppSettingsConnectionStrings,,這兩個屬性分別與配置文件中的appSettingsconnectionStrings配置節(jié)相對應,,appSettings返回一個NameValueCollection,而connectionStrings返回一個ConnectionStringSettingsCollection類,。根據(jù)上面講解的知識,,不但能夠讀取.NET Framework中已經(jīng)定義好的內置結點的信息,,也可以自定義結點,。

11.4.1使用.Net內置結點和.Net內置處理程序

在目錄InElementAndMethod中添加一個控制臺應用程序InElementAndMethod,,在該應用程序中,,添加一個配置文件,然后將配置文件中的信息打印出來,。

配置文件的內容:

<?xml version="1.0"?>

<configuration>

  <!-- 使用.Net內置的結點和處理程序 -->

  <appSettings>

    <add key="Name" value="TraceFact.Net"/>

    <add key="Version" value="v1.0.08040301" />

    <add key="Language" value="Chinese" />

  </appSettings>

</configuration>

main函數(shù)中讀取這些信息,,并打印出來。

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Configuration;//手工添加

 

 

namespace InElementAndMethod

{

    class Program

    {

        static void Main(string[] args)

        {

            string Name = ConfigurationManager.AppSettings["Name"];

            string Language = ConfigurationManager.AppSettings["Language"];

            string Version = ConfigurationManager.AppSettings["Version"];

            Console.WriteLine("名稱:{0},,版本:{1},,語言:{2}", Name, Version, Language);

            Console.ReadKey();

 

        }

    }

}

由于控制臺應用程序并不包含System.Configuration.dll程序集,所以如果要使用ConfigurationManager類,,必須首先在項目中添加該引用,。

程序的運行結果為:名稱:TraceFact.Net,版本:v1.0.08040301,,語言:Chinese

大家在配置文件App.config中并沒有看到configSections 配置節(jié)聲明部分,,而是直接包含了appSettings配置節(jié),依然能使用appSettings配置節(jié),,并沒有出現(xiàn)未識別的配置元素的異常,,那么現(xiàn)在在配置文件中再添加一個自己定義的配置節(jié)??匆幌聲霈F(xiàn)什么樣的問題,。

新添加的配置節(jié)

<VS2008>

    <add key="Year"  value="2008"/>

    <add key="Company"  value="MicroSoft"/>

</VS2008>

重新編譯程序,會看到圖11-24的信息

11-24

運行程序會出現(xiàn)圖11-25的異常

11-25

為什么appSettings配置節(jié)都沒有問題,,而VS2008就不行呢,?這是因為appSettings是系統(tǒng)內部定義的結點,在系統(tǒng)內有一個文件machine.config,,該文件主要設置一些具有具有全局方面的設置,,以提供全局服務。該文件一般在C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG目錄中,,打開該文件,,可以看到圖11-26所示的信息。

11-26

雖然在程序InElementAndMethod的配置文件中沒有明確的聲明appSettings配置節(jié),,沒有指定它在.NET中的處理程序,,但是在machine.config中已經(jīng)提前聲明了,所以在程序中能直接使用。能不能仿照appSettings配置節(jié)的聲明,,在自己的程序中也聲明一下,,是不是自己定義的配置節(jié)也就能夠使用了呢?

machine.config文件中關于appSettings配置節(jié)的聲明部分,,拷貝到App.config文件中,。將name改為“VS2008”,然后在main函數(shù)中輸入下列內容,。

 string Year = ConfigurationManager.GetSection("Year").ToString();

string Company = ConfigurationManager. .GetSection("Company") ToString();

仍然不能運行,,原因在什么地方呢,?

11.4.2使用自定義結點和.Net內置處理程序

上面示例中,,自己寫了一個VS2008的配置節(jié)結點,然后仿照appSettings配置節(jié)的聲明部分,,在應用程序的配置文件也進行了聲明,,可是依然不能使用,原因在于聲明部分的type指出的類型上面,。VS2008聲明的類型是System.Configuration.AppSettingsSection,,這個數(shù)據(jù)集是為appSettings配置節(jié)專門編寫的處理程序。所以在VS2008配置節(jié)中不能使用,,現(xiàn)在需要提供自己的處理VS2008配置節(jié)的處理程序,。

.Net中已經(jīng)提供了3個處理配置節(jié)的處理程序,它們是System.Configuration.SingleTagSectionHandler,、   System.Configuration.DictionarySectionHandler,、 System.Configuration.NameValueSectionHandler

 

System.Configuration.SingleTagSectionHandler,,只能夠處理形如

<VS008  Year="2008"  Company="MicroSoft"/>這樣的標簽,。

System.Configuration.NameValueSectionHandler就能夠處理

<VS2008>

    <add key="Year"  value="2008"/>

    <add key="Company"  value="MicroSoft"/>

</VS2008>

這樣的配置節(jié),其實ConfigurationManager.AppSettings 返回的就是一個NameValueCollection(表示可通過鍵或索引訪問的關聯(lián)String類型的鍵和String類型的值的集合,,在命名空間System.Collections.Specialized),。為了演示這兩種處理程序,修改App.config,,如下:

<?xml version="1.0"?>

<configuration>

  <!-- 使用.Net內置的結點和處理程序 -->

  <configSections>   

    <section name="VS2008_1" type="System.Configuration.SingleTagSectionHandler, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>

    <section name ="VS2008_2" type="System.Configuration.NameValueSectionHandler,System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>

  </configSections>

  <appSettings>

    <add key="Name" value="TraceFact.Net"/>

    <add key="Version" value="v1.0.08040301" />

    <add key="Language" value="Chinese" />

  </appSettings> 

  <VS2008_1  Year="2008"  Company="MicroSoft"/>

  <VS2008_2>

    <add key="Year"  value="2008"/>

    <add key="Company"  value="MicroSoft"/>

  </VS2008_2>

  </configuration>

讀取配置文件信息的完整的代碼如下:

using System;

using System.Collections;

using System.Linq;

using System.Text;

using System.Configuration;//手工添加,,用到ConfigurationManager

using System.Collections.Specialized;//手工添加,用到NameValueCollection

 

namespace InElementAndMethod

{

    class Program

    {

        static void Main(string[] args)

        {

            string Name = ConfigurationManager.AppSettings["Name"];

            string Language = ConfigurationManager.AppSettings["Language"];

            string Version = ConfigurationManager.AppSettings["Version"];

            Console.WriteLine("名稱:{0},,版本:{1},,語言:{2}", Name, Version, Language);

            //采用SingleTagSectionHandler處理程序,得到哈希表

            Console.WriteLine("采用SingleTagSectionHandler處理程序.");

            Hashtable VS2008_1 =(Hashtable)ConfigurationManager.GetSection("VS2008_1");           

            Console.WriteLine("Year{0},,Company{1}", (string)VS2008_1["Year"], (string)VS2008_1["Company"]);

            Console.WriteLine("采用NameValueSectionHandler處理程序.");

            //采用NameValueSectionHandler處理程序,,得到NameValueCollection

            NameValueCollection VS2008_2 = (NameValueCollection)ConfigurationManager.GetSection("VS2008_2");           

            foreach (string key in VS2008_2.Keys)

            {

                Console.WriteLine("{0}={1}", key, VS2008_2[key]);

            }

            Console.ReadKey();

        }

    }

}

運行程序,結果是:

名稱:TraceFact.Net,,版本:v1.0.08040301,,語言:Chinese

采用SingleTagSectionHandler處理程序.

Year2008,,CompanyMicroSoft

采用NameValueSectionHandler處理程序.

Year=2008

Company=MicroSoft

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報,。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多