1、原始配置文件的问题
咱们在作开发时,不论是B/S仍是C/S,如今几乎全部的项目都会碰到使用配置文件,简单点的如连接字符串、上传路径啊,一些API的接口地址等等。复杂点就更多了,如ActiveMQ的配置信息(地址、端口、用户名、密码)等等。html
在.Net开发中已经在(Web.config/App.config)中提供了相对完善的配置系统,简单的如:appSettings;复杂的如:section;相信你们必定用过,固然使用配置文件第一步先添加引用:“System.Configuration”;git
- appSettings使用 System.Configuration.ConfigurationManager.AppSettings[name]便可获取单个的配置项,能够说很是简单方便。
- section不少人也许很陌生,可是在开发中也许都碰到过,好比在使用EntityFramework时,会在configSections中添加一项section name为entityFramework一项配置。固然确定能够自定义section,但在使用配置文件的section相对比较复杂,并且数据类型支持的颇有限,代码过多等缘由。在实际开发中LZ比较少用section,实在配置项过多逼不得已才会使用section。
如上所说,在配置文件中碰到须要配置不少项时,原始配置文件存在着诸多不便,本篇就是告诉你们怎么在配置多项时更加容易的使用配置文件。程序员
2、思路和解决办法
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,方便你们使用。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 简单应用
- 安装包 Emrys.SuperConfig
1PM>Install-Package Emrys.SuperConfig
-
新建类 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}
- 在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>
-
获取配置文件信息学习
1var 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