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

1、原始配置文件的問題

咱們在作開發時,不論是B/S仍是C/S,如今幾乎全部的項目都會碰到使用配置文件,簡單點的如連接字符串、上傳路徑啊,一些API的接口地址等等。複雜點就更多了,如ActiveMQ的配置信息(地址、端口、用戶名、密碼)等等。html

在.Net開發中已經在(Web.config/App.config)中提供了相對完善的配置系統,簡單的如:appSettings;複雜的如:section;相信你們必定用過,固然使用配置文件第一步先添加引用:「System.Configuration」;git

  1. appSettings使用 System.Configuration.ConfigurationManager.AppSettings[name]便可獲取單個的配置項,能夠說很是簡單方便。
  2. section不少人也許很陌生,可是在開發中也許都碰到過,好比在使用EntityFramework時,會在configSections中添加一項section name爲entityFramework一項配置。固然確定能夠自定義section,但在使用配置文件的section相對比較複雜,並且數據類型支持的頗有限,代碼過多等緣由。在實際開發中LZ比較少用section,實在配置項過多逼不得已纔會使用section。

如上所說,在配置文件中碰到須要配置不少項時,原始配置文件存在着諸多不便,本篇就是告訴你們怎麼在配置多項時更加容易的使用配置文件。程序員

 

2、思路和解決辦法

a)、思路

  1. 最好沿用原始的配置方法,也就是使用section,這樣能夠不用指定配置文件位置,名稱等等。固然若是須要單獨的配置文件,或者不用section模式也能夠隨意的擴展。再或者知道xml格式的字符串也能夠獲取配置,如配置在數據庫中等。
  2. 須要新建一個類,其中包括咱們須要配置的信息,也就是一些屬性,固然最好不須要繼承父類或者實現接口。
  3. 須要配置配置文件,固然是按照新建類的格式配置,數據類型簡單的須要支持Int、String、double、Enum、Datetime等,複雜的最好支持:KeyValuePair、Array、List、Dictionary等。
  4. 最好一行代碼使用泛型能夠獲取具體的配置信息,如var config=Xxxx<T>.Value;

b)、解決辦法

目前在網上LZ並無找到在.Net中更好的使用配置文件,因此LZ無奈本身寫了一個,能夠實現我所說的「思路」,並MIT開源放置Github上,供你們交流學習,並且上傳至Nuget,方便你們使用。github

 

3、Emrys.SuperConfig

Github:https://github.com/Emrys5/Emrys.SuperConfig  歡迎你們Star ^_^web

Nuget:https://www.nuget.org/packages/Emrys.SuperConfig數據庫

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

 

4、Emrys.SuperConfig 簡單應用

  1. 安裝包 Emrys.SuperConfig
    ?
    1
    PM>Install-Package Emrys.SuperConfig
  2. 新建類 UserInfopost

    複製代碼
     1 class UserInfo
     2 {
     3     public string UserName { get; set; }
     4     public string Email { get; set; }
     5     public int Age { get; set; }
     6     public string BlogUrl { get; set; }
     7     public Color FavoriteColor { get; set; }
     8     public Color DislikeColor { get; set; } 
     9     public List<string> Language { get; set; }
    10    
    11 }
    12 enum Color{Red,Blue,Black} 
    複製代碼
  3. 在web.config或者app.config中配置配置文件
    複製代碼
     1 <?xml version="1.0" encoding="utf-8" ?>
     2 <configuration>
     3   <configSections>
     4     <section name="userInfo" type="Emrys.SuperConfig.Section,Emrys.SuperConfig"></section>
     5   </configSections>
     6   <userInfo userName="Emrys" email="i@emrys.me" age="27">
     7     <blogUrl>http://www.cnblogs.com/emrys5/</blogUrl>
     8     <favoriteColor>Blue</favoriteColor>
     9     <dislikeColor>2</dislikeColor> 
    10     <language>
    11       <value>Putonghua</value>
    12       <value>Huaipu</value>
    13       <value>English</value>
    14     </language> 
    15   </userInfo> 
    16 </configuration> 
    複製代碼
  4.  獲取配置文件信息學習

    ?
    1
    var user = SuperConfig< UserInfo >.Value;

 

只須要一行代碼就能夠獲取全部的配置信息,能夠用簡單方便易用來形容。this

 

4、Emrys.SuperConfig 其餘

 

一、支持的數據類型

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

更多複雜的類型如KeyValuePair/Array/List/Dictionary等請參看Wiki:支持數據類型

 

二、自定義配置文件位置

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

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

 

三、自定義配置文件命名規則

在開發中,有不少人程序員的命名規則不是很統一,全部就會出現名稱大小寫的問題,其中命名包含xml的element和Attribute的名稱。

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

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

 

四、自定義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>
複製代碼

更多請參看Wiki:自定義Section格式

 

5、總結

LZ鑑於不夠方便的在.Net中使用配置文件和在網上沒有找到合適的方法,全部本身按照本身的想法寫了一個,但願對你們也有所幫助。

最後別忘記了「推薦」和Github Star 謝謝!

Github:https://github.com/Emrys5/Emrys.SuperConfig  歡迎你們Star ^_^

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

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

 

 

出處:http://www.cnblogs.com/emrys5/p/superconfig.html

相關文章
相關標籤/搜索