.NET 更容易的使用配置文件 SuperConfig

一、原始配置文件的問題

我們在做開發(fā)時,不管是B/S還是C/S,現(xiàn)在幾乎所有的項目都會碰到使用配置文件,簡單點的如鏈接字符串、上傳路徑啊,一些API的接口地址等等。復(fù)雜點就更多了,如ActiveMQ的配置信息(地址、端口、用戶名、密碼)等等。

在.NET 開發(fā)中已經(jīng)在(Web.config/App.config)中提供了相對完善的配置系統(tǒng),簡單的如:appSettings;復(fù)雜的如:section;相信大家一定用過,當然使用配置文件第一步先添加引用:“System.Configuration”;

appSettings使用 System.Configuration.ConfigurationManager.AppSettings[name]即可獲取單個的配置項,可以說非常簡單方便。

section很多人也許很陌生,但是在開發(fā)中也許都碰到過,比如在使用EntityFramework時,會在configSections中添加一項section name為entityFramework一項配置。當然肯定可以自定義section,但在使用配置文件的section相對比較復(fù)雜,而且數(shù)據(jù)類型支持的很有限,代碼過多等原因。在實際開發(fā)中LZ比較少用section,實在配置項過多逼不得已才會使用section。

如上所說,在配置文件中碰到需要配置很多項時,原始配置文件存在著諸多不便,本篇就是告訴大家怎么在配置多項時更加容易的使用配置文件。

二、思路和解決辦法

a)、思路

最好沿用原始的配置方法,也就是使用section,這樣可以不用指定配置文件位置,名稱等等。當然如果需要單獨的配置文件,或者不用section模式也可以隨意的擴展。再或者知道xml格式的字符串也可以獲取配置,如配置在數(shù)據(jù)庫中等。

需要新建一個類,其中包括我們需要配置的信息,也就是一些屬性,當然最好不需要繼承父類或者實現(xiàn)接口。

需要配置配置文件,當然是按照新建類的格式配置,數(shù)據(jù)類型簡單的需要支持Int、String、double、Enum、Datetime等,復(fù)雜的最好支持:KeyValuePair、Array、List、Dictionary等。

最好一行代碼使用泛型可以獲取具體的配置信息,如var config=Xxxx<T>.Value;

b)、解決辦法

目前在網(wǎng)上LZ并沒有找到在.Net中更好的使用配置文件,所以LZ無奈自己寫了一個,可以實現(xiàn)我所說的“思路”,并MIT開源放置Github上,供大家交流學(xué)習(xí),而且上傳至Nuget,方便大家使用。

三、Emrys.SuperConfig

Github:https://github.com/Emrys5/Emrys.SuperConfig

Nuget:https://www.nuget.org/packages/Emrys.SuperConfig

Wiki:https://github.com/Emrys5/Emrys.SuperConfig/wiki

四、Emrys.SuperConfig 簡單應(yīng)用

安裝包 Emrys.SuperConfig

PM>Install-Package Emrys.SuperConfig

新建類 UserInfo

class UserInfo
{
    public string UserName { get; set; }
    public string Email { get; set; }
    public int Age { get; set; }
    public string BlogUrl { get; set; }
    public Color FavoriteColor { get; set; }
    public Color DislikeColor { get; set; } 
    public List<string> Language { get; set; }
}
enum Color{Red,Blue,Black} 

在web.config或者app.config中配置配置文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="userInfo" type="Emrys.SuperConfig.Section,Emrys.SuperConfig"></section>
  </configSections>
  <userInfo userName="Emrys" email="i@emrys.me" age="27">
    <blogUrl>http://www.cnblogs.com/emrys5/</blogUrl>
    <favoriteColor>Blue</favoriteColor>
    <dislikeColor>2</dislikeColor> 
    <language>
      <value>Putonghua</value>
      <value>Huaipu</value>
      <value>English</value>
    </language> 
  </userInfo> 
</configuration> 

獲取配置文件信息

var user = SuperConfig<UserInfo>.Value;

只需要一行代碼就可以獲取所有的配置信息,可以用簡單方便易用來形容。

五、Emrys.SuperConfig 其他

1、支持的數(shù)據(jù)類型

普通的數(shù)據(jù)類型支持 String、Int、Double、DateTime、Bool、Enum等,這些都是比較簡單的數(shù)據(jù)類型直接使用即可。

更多復(fù)雜的類型如KeyValuePair/Array/List/Dictionary等請參看Wiki:支持數(shù)據(jù)類型

2、自定義配置文件位置

在實際開發(fā)中,我們也許不把配置文件放置默認的Web.config/App.config,如單獨配置用戶的信息等等

更多請參看Wiki:自定義配置文件位置

3、自定義配置文件命名規(guī)則

在開發(fā)中,有很多人程序員的命名規(guī)則不是很統(tǒng)一,所有就會出現(xiàn)名稱大小寫的問題,其中命名包含xml的element和Attribute的名稱。

SuperConfig默認采用的首字母小寫,也就是小駝峰。

更多請參看Wiki:自定義配置文件命名規(guī)則

4、自定義Section格式

在原始的配置文件中,我們需要自定義配置文件,那么就需要在配置文件中配置section,如我們常見的EntityFramework。

如果我們自定義配置文件位置,也就說不用原始的配置文件,那么我們也就沒必要按照之前的配置方法每次在configSections新建一個Section,然后在配置。

我們完全可以自定義自己的配置文件格式,如:

<?xml version="1.0" encoding="utf-8" ?> 
<config>
  <userInfo userName="CEmrys" email="i@emrys.me" age="17">
    <blogUrl>http://www.cnblogs.com/emrys5/</blogUrl>
    <favoriteColor>Blue</favoriteColor>
    <dislikeColor>2</dislikeColor>
  </userInfo>
  <arrayString>
    <item>a</item>
    <item>b</item>
    <item>c</item>
    <item>d</item>
    <item>e</item>
  </arrayString>
</config>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容