一、原始配置文件的问题

我们在做开发时,不管是B/S还是C/S,现在几乎所有的项目都会碰到使用配置文件,简单点的如链接字符串、上传路径啊,一些API的接口地址等等。复杂点就更多了,如ActiveMQ的配置信息(地址、端口、用户名、密码)等等。

在.Net开发中已经在(Web.config/App.config)中提供了相对完善的配置系统,简单的如:appSettings;复杂的如:section;相信大家一定用过,当然使用配置文件第一步先添加引用:“System.Configuration”;

  1. appSettings使用 System.Configuration.ConfigurationManager.AppSettings[name]即可获取单个的配置项,可以说非常简单方便。
  2. section很多人也许很陌生,但是在开发中也许都碰到过,比如在使用EntityFramework时,会在configSections中添加一项section name为entityFramework一项配置。当然肯定可以自定义section,但在使用配置文件的section相对比较复杂,而且数据类型支持的很有限,代码过多等原因。在实际开发中LZ比较少用section,实在配置项过多逼不得已才会使用section。

如上所说,在配置文件中碰到需要配置很多项时,原始配置文件存在着诸多不便,本篇就是告诉大家怎么在配置多项时更加容易的使用配置文件。

二、思路和解决办法

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,方便大家使用。

三、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 简单应用

  1. 安装包 Emrys.SuperConfig

    PM>Install-Package Emrys.SuperConfig
  2. 新建类 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}
  3. 在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> 
  4. 获取配置文件信息

     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="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格式

五、总结

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

.Net 更容易的使用配置文件 SuperConfig的更多相关文章

  1. 更好的利用配置文件和importlib

    需求:做不同的操作时只需修改配置文件即可完成 # message/email.py from .base import Base # 子类必须实现send方法,否则抛出异常 class Email(B ...

  2. CentOS下源码安装vsftpd-3.0.0,并设置指定用户访问指定目录(附带完整配置文件)

    1.卸载系统已经存在的ftp服务器 因为是源码安装,所以不能通过rpm -qa的方式查看是否已经安装ftp服务器,可以通过find / | grep vsftp*方式查看系统中存在哪些与vsftpd相 ...

  3. vim配置文件和插件管理

    本文通过总结零碎的资料总结而成,更多是去引导学习vim配置文件及插件使用. .vimrc配置文件,内容如下(备注清晰) "引入插件pathogen使用 execute pathogen#in ...

  4. MyBatis 源码分析 - 配置文件解析过程

    * 本文速览 由于本篇文章篇幅比较大,所以这里拿出一节对本文进行快速概括.本篇文章对 MyBatis 配置文件中常用配置的解析过程进行了较为详细的介绍和分析,包括但不限于settings,typeAl ...

  5. sitecore系列教程之Sitecore个性化-配置文件,模式和角色

    这是利用Sitecore规则引擎实现数字化转换的三部分系列的第二部分.阅读上一篇文章,通过为您的个性化体验定义内容策略来设置基础.   Sitecore有一个非常强大的规则引擎,可以帮助推动个性化的用 ...

  6. 【玩转SpringBoot】配置文件yml的正确打开姿势

    序言 在很久以前,Spring的配置文件是基于XML的.它的名字就是applicationContext.xml,没错,就只有这一个xml文件. 它里面配置了所有的东西.但是数据库信息通常会单独拿出来 ...

  7. 转载-使用Nodepad++来编辑我们服务器的配置文件

    转自------------------ 作者:李阿昀 来源:CSDN 原文:https://blog.csdn.net/yerenyuan_pku/article/details/73128819 ...

  8. SpringBoot(二) - 核心配置文件

    1.application.properties 和 application.yml 配置文件格式区别 1.1 文件格式 application.properties # 端口号 server.por ...

  9. UP Board 网络设置一本通

    前言 原创文章,转载引用务必注明链接,水平有限,欢迎指正. 本文环境:ubilinux 3.0 on UP Board 本文使用Markdown写成,为获得更好的阅读体验和正常的图片.链接,请访问我的 ...

随机推荐

  1. JavaScript语法详解:JS简介&变量

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. JavaScript简介 Web前端有三层: HTML:从语义的角度,描 ...

  2. 咫尺论坛|即速应用-微信小程序社区

    咫尺论坛|即速应用-微信小程序社区 是一个集微信和支付宝小程序行业资讯.开发资源.技术交流于一身的大型小程序开发论坛,成立伊始便迅速聚集了一大批小程序开发爱好者,短时间内成为了国内领先的小程序开发者社 ...

  3. vue 购物车练习

    本人看了vue官网上的教程后,感觉对vue的依稀有点了解,决定动手练习个小功能项目,就找了购物车本项目.原文链接:http://blog.csdn.net/take_dream_as_horse/ar ...

  4. Flask-SQLAlchemy

    Flask-SQLAlchemy   SQLAlchemy 一. 介绍 SQLAlchemy是一个基于Python实现的ORM框架.该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言 ...

  5. Java与算法之(12) - 老鼠再闯迷宫(广度优先算法)

    贪吃的小老鼠又回来了,这次有什么新的办法吃到奶酪呢? 规则不变,只能上下左右在格子内移动. 因为上次的深度优先算法让老鼠走了不少冤枉路,这次老鼠带来了帮手探路鼠.探路鼠的使用规则如下: 小老鼠按右.下 ...

  6. 【转】adb操作命令详解及大全

    adb是什么?:adb的全称为Android Debug Bridge,就是起到调试桥的作用.通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是debug工具.a ...

  7. Machine Learning - week 1

    Matrix 定义及基本运算 Transposing To "transpose" a matrix, swap the rows and columns. We put a &q ...

  8. 2017 Multi-University Training Contest - Team 9 1001&&HDU 6161 Big binary tree【树形dp+hash】

    Big binary tree Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  9. [51nod Round15 E ]Danganronpa

    AC自动机,树上莫队,树状数组.. 比赛的时候完全看不出来...赛后去膜了一波网上题解才明白= = 离线,先把AC自动机建出来,把fail边反向建出fail树. 发射言弹,就是将言弹结束节点的fail ...

  10. ZOJ 1002 DFS

    Fire Net Time Limit: 2 Seconds      Memory Limit: 65536 KB Suppose that we have a square city with s ...