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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

自定义配置节与配置节的读取

發布時間:2023/11/30 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自定义配置节与配置节的读取 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、引子

你是否也遇到過這樣的問題:項目很多配置都寫到了App.Config或Web.Config的AppSettings內,每個人都加了幾條,到最后囤積了大量的配置,分不清哪個是有用的、哪個是沒用的了。(即便加了相關注釋,也是亂的可以)

?1???<appSettings>
?2?????<!--是否拋出異常-->
?3?????<add?key="HasException"?value="true"?/>
?4?????<add?key="Mess**********_Enable"?value="true"?/>
?5?????<add?key="Mess**********_CorpCode"?value=""?/>
?6?????<add?key="Mess**********_Url"?value=""?/>
?7?????<add?key="Mess**********_Account"?value=""?/>
?8?????<add?key="Mess**********_AuthKey"?value=""?/>
?9?????<add?key="Mess**********_CGID"?value=""?/>
10?????<add?key="Mess**********_MaxNumberPerHour"?value=""?/>
11?????<add?key="Mess**********_Signature"?value=""?/>
12?????<add?key="Mess**********__Enable"?value="true"?/>
13?????<add?key="JPush**********Key"?value="**********"?/>
14?????<add?key="JPush**********Secret"?value="**********"?/>
15?????<add?key="Aud**********Hosts"?value="127.0.0.1:1000"?/>
16?????<!--true開啟?false?關閉-->
17?????<add?key="Mess**********_Enable"?value="true"?/>
18?????<!--key-->
19?????<add?key="Baidu**********Key"?value="**********"?/>
20?????<add?key="Baidu**********Secret"?value="**********"?/>
21?????<!--微信開發者?AppId,Secret和Token-->
22?????<add?key="AppId"?value="**********"?/>
23?????<add?key="Secret"?value="**********"?/>
24?????<add?key="Token"?value="**********"?/>
25?????<!--證書文件路徑(退款用)-->
26?????<add?key="CertPath"?value="E:\cert\apiclient_cert.pem"?/>
27?????<!--App證書文件路徑(退款用)-->
28?????<add?key="AppCertPath"?value="E:\cert\**********.pfx"?/>
29???</appSettings>

那么問題來了,怎么解決呢? ?

二、方案

?將同類、同項目、同模塊的配置放到自定義配置節下,統一管理、讀取,(可能并不是很好的解決方案,不喜勿噴)。如:

?1?<configuration>
?2???<configSections>
?3?????<!--自定義Section聲明-->
?4?????<!--name:自定義節點名稱-->
?5?????<!--type:讀取配置信息類的命名空間,所在程序集-->
?6?????<section?name="AssemblyInfo"?type="Hetring.ConfigReader.SectionReader,Hetring.ConfigReader"?requirePermission="false"></section>
?7???</configSections>
?8?
?9???<!--名稱同聲明的name-->
10???<AssemblyInfo>
11?????<add?key="Name"?value="Hetring.ConfigReader"?/>
12?????<add?key="Version"?value="1.0"?/>
13?????<add?key="Description"?value="This?is?description."?/>
14???</AssemblyInfo>
15?</configuration> 三、代碼

自定義配置節處理程序,需繼承System.Configuration.IConfigurationSectionHandler接口,并實現object Create(object parent, object configContext, XmlNode section)方法:

?1?????public?class?SectionReader?:?IConfigurationSectionHandler
?2?????{
?3?????????public?object?Create(object?parent,?object?configContext,?System.Xml.XmlNode?section)
?4?????????{
?5?????????????lock?(typeof(SectionReader))
?6?????????????{
?7?????????????????Hashtable?sectionSetting?=?new?Hashtable();//存放配置信息,也可用Dictionary<string,string>
?8?
?9?????????????????foreach?(XmlNode?node?in?section.ChildNodes)
10?????????????????{
11?????????????????????if?(node.NodeType?==?XmlNodeType.Element?&&?node.Name?==?"add")
12?????????????????????{
13?????????????????????????var?key?=?node.Attributes["key"].Value;
14?????????????????????????var?value?=?node.Attributes["value"].Value;
15?????????????????????????sectionSetting.Add(key,?value);//放入hashtable中
16?????????????????????}
17?????????????????}
18?
19?????????????????return?sectionSetting;
20?????????????}
21?????????} 22?????}?

?讀取配置節時,需要用到System.Configuration.ConfigurationManager.GetSection(SectionName)方法,獲取到的是object類型對象,而我們定義的處理程序返回的是Hashtable,直接轉換即可:

?1?????public?class?AssemblyInfoConfig
?2?????{
?3?????????///?<summary>
?4?????????///?Section名稱
?5?????????///?</summary>
?6?????????private?static?string?SectionName?=?"AssemblyInfo";
?7?
?8?????????private?static?Hashtable?_settings?{?get;?set;?}
?9?
10?????????protected?static?Hashtable?SectionSettings
11?????????{
12?????????????get
13?????????????{
14?????????????????//當無配置時,ConfigurationManager.GetSection()會返回null,這里強制創建一個hashtable,防止空引用
15?????????????????if?(_settings?==?null)
16?????????????????????_settings?=?(ConfigurationManager.GetSection(SectionName)?as?Hashtable)????new?Hashtable();
17?
18?????????????????return?_settings;
19?????????????}
20?????????}
21?
22?????????public?static?string?Name
23?????????{
24?????????????get
25?????????????{
26?????????????????return?ObjectToString(SectionSettings["Name"]);
27?????????????}
28?????????}
29?
30?????????public?static?string?Version
31?????????{
32?????????????get
33?????????????{
34?????????????????return?ObjectToString(SectionSettings["Version"]);
35?????????????}
36?????????}
37?
38?????????public?static?string?Description
39?????????{
40?????????????get
41?????????????{
42?????????????????return?ObjectToString(SectionSettings["Description"]);
43?????????????}
44?????????}
45?
46?????????#region?私有方法
47?
48?????????///?<summary>
49?????????///?將Object轉換為非null字符串
50?????????///?</summary>
51?????????///?<param?name="value">待轉換Object</param>
52?????????///?<returns>不為空的字符串(value為null,返回空字符串)</returns>
53?????????private?static?string?ObjectToString(object?value)
54?????????{
55?????????????if?(value?==?null)
56?????????????????return?string.Empty;
57?
58?????????????return?value.ToString();
59?????????}
60?
61?????????#endregion
62?????} 四、調用

?寫了個控制臺測試下:

?1?????class?Program
?2?????{
?3?????????static?void?Main(string[]?args)
?4?????????{
?5?????????????Console.WriteLine("Name:"?+?AssemblyInfoConfig.Name);
?6?????????????Console.WriteLine("Version:"?+?AssemblyInfoConfig.Version);
?7?????????????Console.WriteLine("Description:"?+?AssemblyInfoConfig.Description);
?8?
?9?????????????Console.ReadKey();
10?????????}
11?????}

?輸出結果:

Name:Hetring.ConfigReaderVersion:1.0Description:This is description.

?

轉載于:https://www.cnblogs.com/hetring/p/4182579.html

總結

以上是生活随笔為你收集整理的自定义配置节与配置节的读取的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 嫩草网站在线观看 | jzjzz成人免费视频 | 夜夜免费视频 | 亚洲黄色小说图片 | 嫩操影院| av激情小说 | 国产精品二区一区二区aⅴ 一卡二卡三卡在线观看 | 国产欧美一区二区三区另类精品 | 美女精品一区二区 | 99精品欧美一区二区三区综合在线 | 黄色a大片 | 粉嫩欧美一区二区三区 | 天天摸夜夜添狠狠添婷婷 | 中文在线一区二区三区 | 欧美激情成人 | 一区二区三区免费在线观看 | 国产主播精品 | 久久久久国产一区二区 | 亚洲国产精品无码久久久 | 色综合五月天 | 国产午夜电影在线观看 | 伊人久久九 | 亚洲五月婷 | 欧美大白屁股 | 久久久久久久亚洲av无码 | 少妇真人直播免费视频 | 婷婷伊人五月 | 五月深爱网 | 四虎精品视频 | 国产91久久精品一区二区 | 色婷婷av国产精品 | 四虎啪啪 | 嫩草网站 | 免费成人视屏 | 亚洲福利小视频 | 在线看三级 | 免费在线日韩 | 毛片av网址 | 青青草伊人 | 欧洲精品在线播放 | 久久666| 男人的天堂色偷偷 | 久久久久久久久久影视 | 国产精品国产精品国产 | 黄页视频在线观看 | 一区在线免费 | 日本精品视频一区 | 黑森林福利视频导航 | 性感美女被爆操 | 邻居校草天天肉我h1v1 | 欧美六区 | 噜噜噜久久,亚洲精品国产品 | 国产伦精品一区二区三区照片 | 看毛片的网站 | 超碰在线免费公开 | www久久com | 中国美女性猛交 | 国产精品久久久久久久久久久久久久久久久久 | www.毛片.com| 成人毛片视频免费看 | 最新91在线 | 手机成人av | 日本欧美中文字幕 | 欧美情侣性视频 | 淫品色影院 | 精品国内自产拍在线观看视频 | 性少妇mdms丰满hdfilm | 97爱爱视频 | 国产无遮挡又黄又爽免费网站 | 人妻 日韩 欧美 综合 制服 | 色婷婷六月 | 亚洲一区二区三区四区五区六区 | 国产精品无码一区二区桃花视频 | 免费播放毛片精品视频 | 性高湖久久久久久久久免费 | 中文字幕欧美激情 | 日本一级大毛片a一 | 婷婷一区二区三区四区 | 国产污污视频在线观看 | 日本一级二级视频 | 国产精华7777777 | 极品尤物在线观看 | 国产精品久久777777毛茸茸 | 国产精品免费无遮挡无码永久视频 | 一曲二曲三曲在线观看中文字幕动漫 | 91亚洲精品一区 | 成人综合一区二区 | 欧洲自拍偷拍 | 日本韩国欧美一区二区 | 福利电影一区二区 | 免费观看国产精品视频 | 99久久久| 免费观看av的网站 | c逼| 性欧美jzjz2 九草影院 | 国产精品久久九九 | 日p视频在线观看 | 91精品国产91久久久久久 | 成人免费a视频 |