c#建立自定義配置節
可是有時候,我們需要對它進行一些擴充套件,加入一些自定義的元素,而不是僅僅使用預設的配置。例如,我們可能需要在程式啟動時,動態的載入某個類,並對其進行初始化,而這個類或者初始化資料是我們在程式設計的時候所不知道的。相信大家都碰到過這樣的問題,這裡就不做過多的解釋了。最好的辦法無非就是把這些可能會改變的東西寫進配置檔案裡面,到你能夠確定的時候,你只需要修改配置檔案就ok了,而不是產品馬上上線的時候還用30秒鐘開啟vs去改**。
新增一些自定義的元素到配置檔案中是很容易的,只需要兩步就能搞定:
1. 在節點中註冊你所要定義的節點名稱及用於處理該節點的配置節處理程式。**如下:
1
2
3
2. 在適當的位置新增自定義的節點。**如下:
1
2
3
4
5
6
7
8
9
10
自定義節點算是新增完了,可是我們怎麼在程式裡面獲取這些配置資訊呢?相信大家很多都是玩xml的高手,用system.xml下的一些類寫個xml的解析類,把我們自定義的節點資訊解析出來,不就得到我們想要的東西了嗎?的確是這樣,大牛果然是大牛,小弟實在是佩服。可是如果用這種方式來實現的話,小弟就實在沒有必要寫這篇博文了。
.net框架為我們實現了很多的配置api,來簡化我們對配置檔案的操作。在第乙個步驟中,我們提到了配置節處理程式,這個程式就是用來讀寫我們自定義的節點資訊的。那麼我們又如何來實現乙個配置節處理程式呢?首先我們來了解一下相關的類和概念。
configurationsection:自定義節點都要繼承該類,以提供對自定義配置節的自定義處理和程式設計訪問。
configurationelement:它表示配置檔案內的乙個元素。
configurationelementcollection:它表示包含乙個子元素集合的配置元素。
有了這些類,我們可以歸納起來配置檔案中有兩種型別的配置元素。
第一,單一型配置元素,即繼承於configurationelement的元素,它不包含任何子元素。
第二,集合型配置元素,即繼承於configurationelementcollection德元素,它包含乙個子元素集合。
概念往往都比較抽象,要搞清楚這些東西,我們還是結合我們上面給的例子來具體說明一下。
在配置節中有兩個元素,即和,而元素又包含了兩個子元素。那麼在這裡就是單一型配置元素,而就是集合型配置元素。我們需要分別實現與這些元素相對應的類及其屬性。
元素:它是乙個單一型的元素,所以我們繼承configurationelement。該元素中有乙個factory屬性,那麼我們在類中進行相應的定義。**如下:
**public class defaultelement: configurationelement
[configurationproperty("factory")]
public string factory
getreturn this["factory"] as string;
setthis["factory"] = value;
注意:在屬性定義上面我們需要註冊該屬性的configurationproperty特性。
子元素:
**public class factoryelement : configurationelement
[configurationproperty( "name" )]
public string name
getreturn this["name"] as string;
setthis["name"] = value;
[configurationproperty("assembly")]
public string assembly
getreturn this["assembly"] as string;
setthis["assembly"] = value;
[configurationproperty("class")]
public string class
getreturn this["class"] as string;
setthis["class"] = value;
元素是集合型元素,繼承configurationelementcollection。
**public class factoryelements : configurationelementcollection
protected override configurationelement createnewelement()
return new factoryelement();
protected override object getelementkey( configurationelement element )
return ((factoryelement)element).name;
public factoryelement this[string name]
getreturn baseget( name ) as factoryelement;
configurationelementcollection類是個抽象類,你應該顯示的實現它的createnewelement方法和getelementkey方法。
節點,繼承於configurationsection
**public class dbfactorysection : configurationsection
[configurationproperty("default")]
public defaultelement defaultfactory
getreturn this["default"] as defaultelement;
setthis["default"] = value;
[configurationproperty( "factorys" )]
public factoryelements factorys
getreturn this["factorys"] as factoryelements;
setthis["factorys"] = value;
配置節處理程式終於寫完了,把這四個類放在同乙個工程目錄下,編譯成乙個dll。在你需要獲取配置資訊的地方,引用這個dll,用dbfactorysection section = configurationmanager.getsection( "dbfactory" ) as dbfactorysection;試試,section是不是你想要的東西呢?
C 建立自定義配置節
可是有時候,我們需要對它進行一些擴充套件,加入一些自定義的元素,而不是僅僅使用預設的配置。例如,我們可能需要在程式啟動時,動態的載入某個類,並對其進行初始化,而這個類或者初始化資料是我們在程式設計的時候所不知道的。相信大家都碰到過這樣的問題,這裡就不做過多的解釋了。最好的辦法無非就是把這些可能會改變...
C 建立自定義配置節
name為自定義節點的名稱,type為自定義節點解析檔案的命名空間和自定義節處理程式的類名 在節點中註冊你所要sql語句定義的節點名稱及用於處理該節點的配置節處理程式。如下 name dbfactory type dbfactory.configuration.dbfactorysection,db...
C 自定義ConfigSections節
sectiongroup 在config檔案中加入以下節點 獲取其中的值 string sectiongroup websiteinfo configuration config configurationmanager.openexeconfiguration configurationuserl...