一、原始配置文件的問題 我們在做開發時,不管是B/S還是C/S,現在幾乎所有的項目都會碰到使用配置文件,簡單點的如鏈接字元串、上傳路徑啊,一些API的介面地址等等。複雜點就更多了,如ActiveMQ的配置信息(地址、埠、用戶名、密碼)等等。 在.Net開發中已經在(Web.config/App.c ...
一、原始配置文件的問題
我們在做開發時,不管是B/S還是C/S,現在幾乎所有的項目都會碰到使用配置文件,簡單點的如鏈接字元串、上傳路徑啊,一些API的介面地址等等。複雜點就更多了,如ActiveMQ的配置信息(地址、埠、用戶名、密碼)等等。
在.Net開發中已經在(Web.config/App.config)中提供了相對完善的配置系統,簡單的如:appSettings;複雜的如:section;相信大家一定用過,當然使用配置文件第一步先添加引用:“System.Configuration”;
- appSettings使用 System.Configuration.ConfigurationManager.AppSettings[name]即可獲取單個的配置項,可以說非常簡單方便。
- section很多人也許很陌生,但是在開發中也許都碰到過,比如在使用EntityFramework時,會在configSections中添加一項section name為entityFramework一項配置。當然肯定可以自定義section,但在使用配置文件的section相對比較複雜,而且數據類型支持的很有限,代碼過多等原因。在實際開發中LZ比較少用section,實在配置項過多逼不得已才會使用section。
如上所說,在配置文件中碰到需要配置很多項時,原始配置文件存在著諸多不便,本篇就是告訴大家怎麼在配置多項時更加容易的使用配置文件。
二、思路和解決辦法
a)、思路
- 最好沿用原始的配置方法,也就是使用section,這樣可以不用指定配置文件位置,名稱等等。當然如果需要單獨的配置文件,或者不用section模式也可以隨意的擴展。再或者知道xml格式的字元串也可以獲取配置,如配置在資料庫中等。
- 需要新建一個類,其中包括我們需要配置的信息,也就是一些屬性,當然最好不需要繼承父類或者實現介面。
- 需要配置配置文件,當然是按照新建類的格式配置,數據類型簡單的需要支持Int、String、double、Enum、Datetime等,複雜的最好支持:KeyValuePair、Array、List、Dictionary等。
- 最好一行代碼使用泛型可以獲取具體的配置信息,如var config=Xxxx<T>.Value;
b)、解決辦法
目前在網上LZ並沒有找到在.Net中更好的使用配置文件,所以LZ無奈自己寫了一個,可以實現我所說的“思路”,並MIT開源放置Github上,供大家交流學習,而且上傳至Nuget,方便大家使用。
三、Emrys.SuperConfig
Github:https://github.com/Emrys5/Emrys.SuperConfig 歡迎大家Star ^_^
Nuget:https://www.nuget.org/packages/Emrys.SuperConfig
Wiki:https://github.com/Emrys5/Emrys.SuperConfig/wiki
四、Emrys.SuperConfig 簡單應用
- 安裝包 Emrys.SuperConfig
PM>Install-Package Emrys.SuperConfig
-
新建類 UserInfo
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}
- 在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="[email protected]" 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>
-
獲取配置文件信息
var user = SuperConfig<UserInfo>.Value;
只需要一行代碼就可以獲取所有的配置信息,可以用簡單方便易用來形容。
四、Emrys.SuperConfig 其他
1、支持的數據類型
普通的數據類型支持 String、Int、Double、DateTime、Bool、Enum等,這些都是比較簡單的數據類型直接使用即可。
更多複雜的類型如KeyValuePair/Array/List/Dictionary等請參看Wiki:支持數據類型
2、自定義配置文件位置
在實際開發中,我們也許不把配置文件放置預設的Web.config/App.config,如單獨配置用戶的信息等等
更多請參看Wiki:自定義配置文件位置
3、自定義配置文件命名規則
在開發中,有很多人程式員的命名規則不是很統一,所有就會出現名稱大小寫的問題,其中命名包含xml的element和Attribute的名稱。
SuperConfig預設採用的首字母小寫,也就是小駝峰。
更多請參看Wiki:自定義配置文件命名規則
4、自定義Section格式
在原始的配置文件中,我們需要自定義配置文件,那麼就需要在配置文件中配置section,如我們常見的EntityFramework。
如果我們自定義配置文件位置,也就說不用原始的配置文件,那麼我們也就沒必要按照之前的配置方法每次在configSections新建一個Section,然後在配置。
我們完全可以自定義自己的配置文件格式,如:
<?xml version="1.0" encoding="utf-8" ?> <config> <userInfo userName="CEmrys" email="[email protected]" 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格式
五、總結
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