C#自定義組態檔
.NET程式中,經常使用Config檔案來配置應用程式中經常使用的值,比如資料庫連接字串,最近專案遇到一個需要配置好多節點在組態檔中的需求,為了使配置節點整潔易維護,在代碼呼叫時也保證獲取時比較直觀,結合自定義組態檔專門整理了一個組態檔幫助類Demo,此篇文章主要講述自定義組態檔的使用方法,
常見組態檔使用方法
- 直接在connectionStrings\appSettings這兩個節點中添加add節點配置
- 這種方式在專案中很常見,使用簡單,這里不做介紹
- 檔案操作
- 很多程式中(自己公司老專案),通過獲取指定路徑下XML\ini\json\txt等檔案,通過IO獲取檔案內容并對檔案進行決議,從而獲取程式需要的配置資訊(不推薦)
自定義組態檔
在App.Config(web.config)中指定其他組態檔的路徑和節點,
在configSections節點下配置section節點,.NET提供自帶的型別進行封裝,(NameValue鍵值對、Dictionary字典、SingTag基礎結構),Section節點的name屬性是自定義節點的名稱,type是接收資訊的資料型別,
注意!configSections節點必須為configuration下第一個節點
configSections的name屬性為自定義配置節點的名稱,type 為轉換的型別
ConfigurationManager.GetSection("name")
方法的引數是自定義組態檔節點的名稱
NameValue鍵值對
配置語法格式:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<!--以NameValueCollection鍵值對的形式回傳配置節點中的資訊,type值固定為System.Configuration.NameValueSectionHandler-->
<section name="NameValueConfigNode" type="System.Configuration.NameValueSectionHandler"/>
</configSections>
<!--自定義配置節點-->
<NameValueConfigNode>
<add key="Name一" value="https://www.cnblogs.com/yangyongdashen-S/p/Value一" />
<add key="Name二" value="https://www.cnblogs.com/yangyongdashen-S/p/Value二" />
<add key="Name三" value="https://www.cnblogs.com/yangyongdashen-S/p/Value三" />
</NameValueConfigNode>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
</startup>
</configuration>
呼叫方法:這里以一個靜態屬性的方法獲取并回傳Dictionary格式(后面幾種方法也采用這個方式)
/// <summary>
/// NameValueCollection
/// </summary>
public static Dictionary<string, string> NameValueConfigNode
{
get
{
NameValueCollection nvc = (NameValueCollection)ConfigurationManager.GetSection("NameValueConfigNode");
Dictionary<string, string> result = new Dictionary<string,string>();
foreach (string key in nvc.AllKeys)
{
result.Add(key, nvc[key]);
}
return result;
}
}
Dictionary
組態檔語法格式:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<!--以Dictionary字典的形式回傳配置節點中的資訊,type固定為System.Configuration.DictionarySectionHandler-->
<section name="DictionaryConfigNode" type="System.Configuration.DictionarySectionHandler"/>
</configSections>
<!--自定義配置節點-->
<DictionaryConfigNode>
<add key="Key一" value="https://www.cnblogs.com/yangyongdashen-S/p/DictValue一" />
<add key="Key二" value="https://www.cnblogs.com/yangyongdashen-S/p/DictValue二" />
<add key="Key三" value="https://www.cnblogs.com/yangyongdashen-S/p/DictValue三" />
</DictionaryConfigNode>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
</startup>
</configuration>
呼叫方法:
/// <summary>
/// Dictionary
/// </summary>
public static Dictionary<string, string> DictionaryConfigNode
{
get
{
IDictionary dict = (IDictionary)ConfigurationManager.GetSection("DictionaryConfigNode");
Dictionary<string, string> result = new Dictionary<string, string>();
foreach (string key in dict.Keys)
{
result.Add(key, dict[key].ToString());
}
return result;
}
}
SingTag
組態檔語法格式:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<!--基礎結構處理 .config 檔案中由單個 XML 標記所表示的各配置節點中的值,type固定為System.Configuration.SingleTagSectionHandler-->
<section name="SingleTagConfigNode" type="System.Configuration.SingleTagSectionHandler" />
</configSections>
<!--自定義配置節點-->
<!--注意,只能是單個節SingleTagSectionHandler才能處理,無論有多少個屬性都能處理-->
<SingleTagConfigNode PropertyOne="1" PropertyTwo="2" PropertyThree="3" PropertyFour="4" PropertyFive="5" />
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
</startup>
</configuration>
呼叫方法:
/// <summary>
/// SingleTag
/// </summary>
public static Dictionary<string, string> SingleTagConfigNode
{
get
{
Hashtable dict = (Hashtable)ConfigurationManager.GetSection("SingleTagConfigNode");
Dictionary<string, string> result = new Dictionary<string, string>();
foreach (string key in dict.Keys)
{
result.Add(key, dict[key].ToString());
}
return result;
}
}
以上程式通過控制臺應用程式測驗呼叫效果如下:
自定義組態檔
以上三種方法,只能讀取應用程式的Web.config或者app.config中的配置資訊,但是在大多數專案中,業務場景復雜,配置資訊更是多到看不過來,所以如果都寫在web.config或者app.config中的話,不太美觀,也不易維護,
那么有沒有一種方法,可以根據需要,配置一個或者多個的config,并且在程式中直接呼叫使用的方法? (問就是有^_^)
下面舉例一種自定義組態檔的寫法
組態檔寫法:
<configSections>節點下<section>的屬性值內容與上面三個方法相同,需要注意的是自定義節點,自定義節點只需要設定configSource屬性即可,屬性值指向自定義組態檔的路徑;
注意:路徑必須要寫成相對路徑,
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<!--把MyConfigData節點的資料映射到MyConfigData類中-->
<section name="MyConfigData" type="ConsoleApplication.ConfigFiles.ConfigFile,ConsoleApplication"/>
</configSections>
<!--自定義配置節點,configSource指定自定義組態檔的路徑(必須是相對路徑)-->
<MyConfigData configSource="ConfigFiles\Framework.config"/>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
</startup>
</configuration>
這是自定義的檔案內容,
<?xml version="1.0" encoding="utf-8" ?>
<MyConfigData>
<add key="Key一" value="https://www.cnblogs.com/yangyongdashen-S/p/自定義檔案一" />
<add key="Key二" value="https://www.cnblogs.com/yangyongdashen-S/p/自定義檔案二" />
<add key="Key三" value="https://www.cnblogs.com/yangyongdashen-S/p/自定義檔案三" />
</MyConfigData>
程式中的呼叫方法與上面的方式一致,這種自定義組態檔的精髓在于,不用將所有配置資訊都擠在一個檔案中,而是根據專案需要合理的分成多個配置,只需要在web.config或者app.config中指定檔案路徑即可,其他使用方法沒有差別
自定義結構組態檔
以上方法為常用的基本組態檔的使用方法,都是使用C#提供的型別進行獲取,組態檔的節點需要按照對應格式設定,C#中還有一種可以自定義組態檔格式的呼叫方法,Config中科自定義節點的結構,然后在程式中需要自定義一個組態檔的類,用于接收自定義組態檔的內容;
其中使用到的型別:
ConfigurationSection、ConfigurationElementCollection、ConfigurationElement、ConfigurationProperty
上面介紹的幾種方法基本上已經足夠日常使用,此篇文章不在進行介紹自定義格式的寫法,后期會根據個人情況(是否懶惰的情況),可能會補充此部分功能,有興趣可以去了解一下,
寫在最后
以上源代碼已經放在Gitee上,可自行下載,
https://gitee.com/yang-yong-666/csharp
該專案還包含其他關于C#的幫助類,并且會持續更新!
個人交流QQ:1695690324
原創不易,轉載請注明出處
博客園:https://www.cnblogs.com/yangyongdashen-S/
CSDN:https://blog.csdn.net/weixin_44312699?spm=1010.2135.3001.5343
Gitee:https://gitee.com/yang-yong-666
公眾號:yi人夕岸
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/469427.html
標籤:C#