目錄
向專案中新增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 個...