如何自定義配置節點

2021-04-24 04:01:15 字數 4440 閱讀 7057

目錄

向專案中新增system.configuration引用。configurationsection、configurationelement、configurationelementcollection這幾個類都是在system.configuration中定義的,而該dll預設並不是新建乙個專案就有的,需要新增該dll引用。

假如我們要配置的節點格式如下:

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

"singlesectionhandler" type="customsinglesection.singlesectionhandler, customsinglesection, version=1.0.0.0, culture=neutral, publickeytoken=null" />

"lastbeachhead">

"softwarezxj" myattribute2="epms"/>

從配置資訊可以看出,我們需要實現乙個類customsinglesection.singlesectionhandler,該類有2個屬性,乙個屬性型別為string,名稱為myattrib1,另外乙個屬性型別為mysinglesection,型別mysinglesection有2個string型別的屬性。因為mysinglesection下並沒有子節點,故該類需要繼承自congigurationelement,而singlesectionhandler因為是乙個section,所以該類需要繼承自system.configurationsection。

具體的實現**如下:

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.configuration;

namespace customsinglesection

public singlesectionhandler(string attribval)

[configurationproperty("myattrib1", defaultvalue = "預設值", isrequired = true)]

[stringvalidator(invalidcharacters = "~!@#$%^&*(){}/;'/"|//", minlength = 1, maxlength = 60)]

public string myattrib1

set 

}[configurationproperty("mysinglesection")]

public mysinglesection mysinglesection

set}

}public

class mysinglesection : configurationelement 

public mysinglesection(string a1, string a2)

[configurationproperty("myattribute1", defaultvalue = "預設屬性1", isrequired = true)]

[stringvalidator(invalidcharacters = "~!@#$%^&*(){}/;'/"|//", minlength = 1, maxlength = 60)]

public string myattribute1

set}

[configurationproperty("myattribute2", defaultvalue = "預設屬性2", isrequired = true)]

[stringvalidator(invalidcharacters = "~!@#$%^&*(){}/;'/"|//", minlength = 1, maxlength = 60)]

public string myattribute2

set}}}

從**裡可以看出了各個基類本身已經有了索引器。另外需要注意的是,配置的資訊都是大小寫敏感的。比如我們在類singlesectionhandler中定義了屬性myattrib1的標籤[configurationproperty("myattrib1", defaultvalue = "預設值", isrequired = true)],那麼在config檔案中屬性的名字就必須是myattrib1,大小寫不能寫錯,而且myattrib1屬性的實現中,使用索引器的時候也必須是get set ,索引器中的鍵名如果不是myattrib1,即跟config中的屬性名稱不一樣,那也是執行不成功的。

使用該配置的**如下:

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.configuration;

namespace customsinglesection

private

static

void lookcustomsinglesection() }}

舉例說明,假如我們需要實現乙個如下的配置:

首先需要定義乙個配置節元素,如下:

}protected

override

object getelementkey(configurationelement element)

[configurationproperty("enable")]

public

bool enable

}[configurationproperty("rebaseclientpath")]

public

bool rebaseclientpath

}//寫乙個索引器,方便的訪問該集合中的元素。

//如果不寫,則只有foreach來訪問。}}

可以看到,實現表示集合元素的類必須從configurationelementcollection類繼承。並且必須提供createnewelement和getelementkey兩個方法的過載。createnewelement其實是乙個工廠方法,在此方法中,你必須返回乙個表示乙個add元素的物件,這樣系統才能從web.config讀取資料並形成乙個集合。getelementkey方法中,你需要返回乙個可以表示為add元素鍵值的屬性,方法的引數就是表示add元素的物件,該物件一定是從configurationelement繼承的,所以我們可以將其轉換為乙個我們自定義的配置物件,然後訪問它的屬性。在示例中我們返回了add元素的url屬性值。因為這個方法是拿到乙個物件對應的key,所以經常被其它方法呼叫以獲取物件。

還差最後一步,就是實現表示add元素的類。如下:

}[configurationproperty("url")]

public

string url}}

唯一需要講述的就是這個類必須從configurationelement繼承。其它的內容通過以上的講述應該能夠很好的理解。

至此,我們已經完成了配置的對映工作。

完整的**如下所示:

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

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.configuration;

namespace custommulsection

}protected

override

object getelementkey(configurationelement element)

[configurationproperty("enable")]

public

bool enable

}[configurationproperty("rebaseclientpath")]

public

bool rebaseclientpath

}//寫乙個索引器,方便的訪問該集合中的元素。

//如果不寫,則只有foreach來訪問。}}

}[configurationproperty("url")]

public

string url}}

}測試**:

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.configuration;

namespace custommulsection

private

static

void dealmulsection() 

console.writeline(sb.tostring());}}

}

自定義配置節點

我希望在web.config中,配置 資訊,管理員資訊,和使用者資訊 當然這個配置有點不切實際了,這裡只是為了演示 所以,我希望按下面的格式做配置。這個sitesetting配置節點是乙個稍微複雜一點的配置,自己包含有attributes,同時包含子節點siteadmin,siteusers,而si...

自定義 如何自定義協議

何為自定義協議,其實是相對標準協議來說的,這裡主要針對的是應用層協議 常見的標準的應用層協議如http ftp smtp等,如果我們在網路通訊的過程中不去使用這些標準協議,那就需要自定義協議,比如我們常用的rpc框架 dubbo,thrift 分布式快取 redis,memcached 等都是自定義...

Gitea 如何配置自定義頁面

gitea 安裝成功後,我們希望在部署 gitea 上使用訪問跟蹤 或者其他的一些 js 指令碼的話,這個只能通過自定義模板來實現。首先需要訪問 gitea 的站點管理介面,然後找到custom file root path配置屬性。然後的路徑就是你需要設定模板的路徑,然後在這個路徑下面新建 2 個...