日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

自定义ConfigurationSection,创建多个嵌套的ConfigurationElementCollection节点

發(fā)布時間:2025/5/22 编程问答 64 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自定义ConfigurationSection,创建多个嵌套的ConfigurationElementCollection节点 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

由于接口地址都是固定的,所以想到使用自定義節(jié)點,來將接口都配置到web.config中。

很快,v1.0版本出爐: 

public class RequestConfigSection : ConfigurationSection{[ConfigurationProperty("sources", IsDefaultCollection = true)][ConfigurationCollection(typeof(RequestConfigSourceCollection), AddItemName = "add")]public RequestConfigSourceCollection ConfigCollection{get { return (RequestConfigSourceCollection)this["sources"]; }set { this["sources"] = value; }}}public class RequestConfigSourceCollection : ConfigurationElementCollection{/// <summary>/// 創(chuàng)建新元素/// </summary>/// <returns></returns>protected override ConfigurationElement CreateNewElement(){return new RequestConfigSource();}/// <summary>/// 獲取元素的鍵/// </summary>/// <param name="element"></param>/// <returns></returns>protected override object GetElementKey(ConfigurationElement element){return ((RequestConfigSource)element).Name;}/// <summary>/// 獲取所有鍵/// </summary>public IEnumerable<string> AllKeys { get { return BaseGetAllKeys().Cast<string>(); } }/// <summary>/// 索引器/// </summary>/// <param name="name"></param>/// <returns></returns>public new RequestConfigSource this[string name]{get { return (RequestConfigSource)BaseGet(name); }}}public class RequestConfigSource : ConfigurationElement{/// <summary>/// 名稱/// </summary>[ConfigurationProperty("name")]public string Name{get { return (string)this["name"]; }set { this["name"] = value; }}/// <summary>/// 地址/// </summary>[ConfigurationProperty("url")]public string Url{get { return (string)this["url"]; }set { this["url"] = value; }}/// <summary>/// 訪問類型/// </summary>[ConfigurationProperty("type")]public RequestType RequestType{get{return (RequestType)Enum.Parse(typeof(RequestType), this["type"].ToString(), true);}set { this["type"] = value; }}}

?

在web.config中的配置方式為:

<apiRequestConfig><sources><add name="..." url="..." type="POST" /><add name="..." url="..." type="POST" /><add name="..." url="..." type="POST" /></sources> </apiRequestConfig>

?這時候又看了一遍需求文檔,發(fā)現(xiàn)有說明不同平臺的接口地址是不一樣的,但接口做的事情是一樣的。

然后就開始想,如果接著在下邊追加,則不同平臺的同一接口的名稱是不能相同的。

所以想到的理想的配置方式為:

<apiRequestConfig><sources platform="android"><add name="..." url="..." type="POST" /><add name="..." url="..." type="POST" /><add name="..." url="..." type="POST" /></sources><sources platform="ios"><add name="..." url="..." type="POST" /><add name="..." url="..." type="POST" /><add name="..." url="..." type="POST" /></sources> </apiRequestConfig>

?但是sources 名稱的節(jié)點只能出現(xiàn)一次…好吧,蛋疼了。

研究嘗試了一上午也沒有找到合適的解決方式,又懶得再重新寫一套代碼來讀取XML,…開始在網(wǎng)上搜解決方案

用中文做關(guān)鍵字找不著…翻了墻,用英文來當關(guān)鍵字 one or more ConfigurationElementCollection…

最終在一老外的博客里找到了一個替代的解決方案,最終的配置為:

<apiRequestConfig><requestConfigs><request platform="android"><sources><add name="..." url="..." type="POST" /><add name="..." url="..." type="POST" /><add name="..." url="..." type="POST" /></sources></request><request platform="ios"><sources><add name="..." url="..." type="POST" /><add name="..." url="..." type="POST" /><add name="..." url="..." type="POST" /></sources></request></requestConfigs></apiRequestConfig>

?

C#代碼如下:

public class RequestConfigSection : ConfigurationSection{[ConfigurationProperty("requestConfigs", IsDefaultCollection = true)][ConfigurationCollection(typeof(RequestConfigTypeCollection), AddItemName = "request")]public RequestConfigTypeCollection ConfigCollection{get { return (RequestConfigTypeCollection)this["requestConfigs"]; }set { this["requestConfigs"] = value; }}/// <summary>/// 根據(jù)平臺和名稱獲取請求配置信息/// </summary>/// <param name="name"></param>/// <param name="platform"></param>/// <returns></returns>public RequestConfigSource GetRequestConfigSource(string platform, string name){return ConfigCollection[platform].SourceCollection[name];}}public class RequestConfigTypeCollection : ConfigurationElementCollection{/// <summary>/// 創(chuàng)建新元素/// </summary>/// <returns></returns>protected override ConfigurationElement CreateNewElement(){return new RequestConfigType();}/// <summary>/// 獲取元素的鍵/// </summary>/// <param name="element"></param>/// <returns></returns>protected override object GetElementKey(ConfigurationElement element){return ((RequestConfigType)element).Platform;}/// <summary>/// 獲取所有鍵/// </summary>public IEnumerable<string> AllKeys { get { return BaseGetAllKeys().Cast<string>(); } }/// <summary>/// 索引器/// </summary>/// <param name="name"></param>/// <returns></returns>public new RequestConfigType this[string platform]{get { return (RequestConfigType)BaseGet(platform); }}}public class RequestConfigType : ConfigurationElement{/// <summary>/// 獲取全部請求配置信息/// </summary>/// <returns></returns>public RequestConfigSource[] GetAllRequestSource(){var keys = this.SourceCollection.AllKeys;return keys.Select(name => this.SourceCollection[name]).ToArray();}/// <summary>/// 平臺標識/// </summary>[ConfigurationProperty("platform")]public string Platform{get { return (string)this["platform"]; }set { this["platform"] = value; }}[ConfigurationProperty("sources", IsDefaultCollection = true)][ConfigurationCollection(typeof(RequestConfigSourceCollection), AddItemName = "add")]public RequestConfigSourceCollection SourceCollection{get { return (RequestConfigSourceCollection)this["sources"]; }set { this["sources"] = value; }}}public class RequestConfigSourceCollection : ConfigurationElementCollection{/// <summary>/// 創(chuàng)建新元素/// </summary>/// <returns></returns>protected override ConfigurationElement CreateNewElement(){return new RequestConfigSource();}/// <summary>/// 獲取元素的鍵/// </summary>/// <param name="element"></param>/// <returns></returns>protected override object GetElementKey(ConfigurationElement element){return ((RequestConfigSource)element).Name;}/// <summary>/// 獲取所有鍵/// </summary>public IEnumerable<string> AllKeys { get { return BaseGetAllKeys().Cast<string>(); } }/// <summary>/// 索引器/// </summary>/// <param name="name"></param>/// <returns></returns>public new RequestConfigSource this[string name]{get { return (RequestConfigSource)BaseGet(name); }}}/// <summary>/// 請求的配置信息/// </summary>public class RequestConfigSource : ConfigurationElement{/// <summary>/// 名稱/// </summary>[ConfigurationProperty("name")]public string Name{get { return (string)this["name"]; }set { this["name"] = value; }}/// <summary>/// 地址/// </summary>[ConfigurationProperty("url")]public string Url{get { return (string)this["url"]; }set { this["url"] = value; }}/// <summary>/// 訪問類型/// </summary>[ConfigurationProperty("type")]public RequestType RequestType{get{return (RequestType)Enum.Parse(typeof(RequestType), this["type"].ToString(), true);}set { this["type"] = value; }}}

?

本人的開發(fā)環(huán)境為 .net framework 4.0

最初RequestConfigSection?類中的ConfigCollection?和??RequestConfigType?類中的SourceCollection? 沒有定義ConfigurationCollection特性

而是在RequestConfigTypeCollectionRequestConfigTypeCollection?中重載了ElementName屬性,返回子級的節(jié)點名。

結(jié)果拋出節(jié)點名未定義的異常…

改由特性ConfigurationCollection定義,并給特性屬性AddItemName賦值為子級的節(jié)點名 解決…

總結(jié)

以上是生活随笔為你收集整理的自定义ConfigurationSection,创建多个嵌套的ConfigurationElementCollection节点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产1区2区3区中文字幕 | 欧美三日本三级少妇三级99观看视频 | 亚洲一线在线观看 | 午夜精品久久久久久毛片 | 一区二区三区欧美视频 | 网址av | 久久国产成人精品av | 综合五月天 | 亚洲成人xxx| 一曲二曲三曲在线观看中文字幕动漫 | 蜜桃精品视频在线 | 一级久久久久久久 | 日本免费高清一区二区 | 河北彩花69xx精品一区 | 国产91边播边对白在线 | 超碰资源总站 | 东北少妇高潮抽搐 | 日本人妻伦在线中文字幕 | 日本免费网址 | 伊人365 | 国产精品免费一区二区 | 在线a级| 一线毛片 | 国内毛片毛片毛片毛片毛片 | 午夜一本 | 欧美国产日韩一区二区三区 | 亚洲影院av | 欧美啪视频 | 亚洲熟女乱综合一区二区三区 | 一区精品视频 | 久久九九99 | 中文字幕亚洲精品在线观看 | 日韩在线1 | 能免费看18视频网站 | 午夜寂寞福利 | 欧美亚洲视频在线观看 | av影片在线观看 | 久久久久99精品 | 色小说综合 | 国产一区二区三区视频播放 | 香蕉久久a毛片 | 中国一级片在线观看 | 国模精品视频一区二区 | 亚洲女优一区 | 精品一区二区三区免费观看 | 精品一区国产 | 黄色国产在线视频 | 成人一级影片 | av老司机在线观看 | 欧美人在线 | 好吊一区二区三区视频 | 污污内射久久一区二区欧美日韩 | 国产艳妇疯狂做爰视频 | 亚洲涩网 | 国产日韩欧美一区 | 色综合久久综合 | 琪琪成人| 女女互磨互喷水高潮les呻吟 | 亚洲专区在线播放 | 青青草自拍偷拍 | 一区二区三区欧美 | 久久久久久九九九九 | 日本欧美韩国国产精品 | 日本中文不卡 | 在线播放91灌醉迷j高跟美女 | 欧美性猛交乱大交 | 五月天开心激情 | 在线se | 丝袜 亚洲 另类 国产 制服 | 精品国产自在精品国产精小说 | 亚洲影院中文字幕 | 在线射 | 青青草狠狠操 | 在线日韩一区二区 | 国产毛片一区 | 国产男男一区二区三区 | 欧美人与禽猛交乱配视频 | 国产一区不卡视频 | 色网站女女| 五月婷婷六月丁香综合 | 欧美激情18 | 2019日韩中文字幕mv | 久久国产美女视频 | 久久精品www人人爽人人 | h视频网站在线观看 | 好男人视频www | av视觉盛宴 | 久久精品免费 | 在线国产网站 | 奇米第四色777 | 一本色道无码道dvd在线观看 | 久久久久久久综合 | 日本视频网 | 日韩午夜视频在线 | 午夜插插插 | 亚洲激情av | 伦av综合一区 | 久久99精品国产.久久久久久 | 亚洲欧美变态另类丝袜第一区 |