C#开发中使用配置文件对象简化配置的本地保存

0x00 起因

程序的核心是数据和逻辑,开发过程中免不了要对操作的数据进行设置,而有些数据在程序执行过程中被用户或程序做出的修改是应该保存下来的,这样程序在下次运行时可以保留上次的一些设置。同样有时我们希望修改某些设置而不需要重新编译程序,这样也可以通过修改本地配置文件达到目的。之前在网上看到过一篇文章,讲的是小程序或测试类的程序应该追求效率,相关配置完全可以硬编码到代码里,无需写到配置文件里。关于什么属于小程序并没有一个明显的界定,至于要不要写到配置文件里这是仁者见仁的问题。我个人还是比较倾向与写到配置文件的。当然,对于脚本语言来说这个问题就小很多了。

那么如何能快捷方便的保存配置信息呢,这次写的这个类就是尝试去解决这个问题的。主要包括创建和载入配置文件、以键值对的形式保存和读取配置信息。在配置信息的保存方式上可以使用XML或者JSON,我选了XML,一方面是阅读起来比较容易,手动修改也方便,另一方面是.NET本身提供XmlDocument类帮助操作XML文件,这样我们只要在此基础上进行一下包装就可以了。

0x01 基本功能的实现

1.配置文件的加载和创建

public static ConfigFile LoadFile(string filename)

用用户加载配置文件,如果文件保护存在则返回null

public static ConfigFile LoadOrCreateFile(string filename)

用于加载配置文件,如果文件不存在则创建一个新对象并调用CreateFile()创建配置文件。

protected virtual void CreateFile()

这个是virtual方法,可以根据需求在子类中重写。

2.配置信息的保存

以下方法都是为了简化操作,对AddOrSetKeyValue的包装

public void AddOrSetConfigValue(string key, string value)

可以将键值对保存在Root/Config节点下,key不存在则创建新key,key已存在则更新值。

Public void AddOrSetConfigValue<T>(string key, T value)

可以将任意类型存入Root/Config节点下,value调用ToString()方法转为string。

3.配置信息的读取

以下方法都是对GetKeyValue的包装

配置以键值对的方式保存,这是个最简单的情况。值的读取都是在Root/Config节点下。

public string GetConfigValue(string key)

根据key从固定的XPath中获取值

public bool TryParseConfigValue(string key, out result)

有多个重载,可以根据key取出值并调用相应的TryParse方法进行类型转换,返回false表示转换失败,结果通过result传出。转换失败时result为类型默认值。

public XXX GetConfigKeyValueIXXX(string key)

根据key获取值并转化为XXX类型,转化失败抛出异常。

4.使用带参数的属性简化键值操作

为了能尽量使操作用着方便,对于string类型的值提供了建议的操作方法,可以通过:

config[“key”]的方式取值,通过config[“key”]=”test”的方式保存。

0x02 功能的扩展

ConfigFile类型只是提供了一个很简单的框架,如果对配置保存有其它需求可以继承该类型并重写CreateFile方法,以在此基础上修改或创建完全不同的配置文件结构。

对GetKeyValue和AddOrSetKeyValue方法包装可以添加新方法以快速读取和保存配置信息。

0x03 测试例子

这个类的使用非常简单,用静态方法创建或载入一个配置文件即可方便的进行读取和保存的操作。

测试代码:

测试结果:

保存的配置文件:

0x04 相关下载

https://github.com/durow/TestArea/tree/master/ConfigFileTest

C#开发中使用配置文件对象简化配置的本地保存的更多相关文章

  1. C#开发中使用配置文件

    C#开发中使用配置文件对象简化配置的本地保存 0x00 起因 程序的核心是数据和逻辑,开发过程中免不了要对操作的数据进行设置,而有些数据在程序执行过程中被用户或程序做出的修改是应该保存下来的,这样程序 ...

  2. spring注解开发中常用注解以及简单配置

    一.spring注解开发中常用注解以及简单配置 1.为什么要用注解开发:spring的核心是Ioc容器和Aop,对于传统的Ioc编程来说我们需要在spring的配置文件中邪大量的bean来向sprin ...

  3. c++实现游戏开发中常用的对象池(含源码)

    c++实现游戏开发中常用的对象池(含源码) little_stupid_child2017-01-06上传   对象池的五要素: 1.对象集合 2.未使用对象索引集合 3.已使用对象索引集合 4.当前 ...

  4. ASP.NET网站开发中的配置文件

    来源:微信公众号CodeL 1.配置文件层次分类 Machine.config:  对.netframework整体的配置 web.config(framework目录下):  对所有项目所公有的应用 ...

  5. 【Java_SSM】(三)maven中的配置文件setting的配置

    这篇博文我们介绍两方面:如何修改setting.xml文件及相应配置(本文maven版本为3.5.0) (1)首先打开maven文件目录--conf,会看见如下目录 (2)复制setting.xml文 ...

  6. 关于JavaEE 开发中web.xml的主要配置及其使用

    web.xml 中的listener. filter.servlet 加载顺序及其详解 在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人 ...

  7. 【Swift】ios开发中巧用 description 打印对象时,打印对象的属性

    ios开发中我们打印对象的时候,会直接输出对象地址,这样不方便我们开发.我们可以 巧用 description 打印对象时,输出对象的属性 在oc中直接重写即可.swift中需要遵守Printable ...

  8. 【详细】总结JavaWeb开发中SSH框架开发问题(用心总结,不容错过)

    在做JavaWeb的SSH框架开发的时候,遇到过很多的细节问题,这里大概记录下 我使用的IDE是Eclipse(老版本)三大框架:Spring4.Struts2.Hibernate5 1.web.xm ...

  9. 安卓开发中Spinner控件的使用

    在安卓手机应用开发中,Spinner对象常用方法有以下五种. 用法 1 :以资源方式,静态展示 Spinner 选项 用法 2 :以代码方式,动态展示 Spinner 选项 用法 3 :同时显示图片和 ...

随机推荐

  1. iOS可视化动态绘制八种排序过程

    前面几篇博客都是关于排序的,在之前陆陆续续发布的博客中,我们先后介绍了冒泡排序.选择排序.插入排序.希尔排序.堆排序.归并排序以及快速排序.俗话说的好,做事儿要善始善终,本篇博客就算是对之前那几篇博客 ...

  2. 4.Windows Server2012 R2里面部署 MVC 的网站

    网站部署之~Windows Server | 本地部署:http://www.cnblogs.com/dunitian/p/4822808.html#iis 后期会在博客首发更新:http://dnt ...

  3. HTML5 input元素新的特性

    在HTML5中,<input>元素增加了许多新的属性.方法及控件.本文章分别对这三方面进行介绍. 目录 1. 属性 2. 方法 3. 新控件 1. 属性 <input>元素在H ...

  4. div实现自适应高度的textarea,实现angular双向绑定

    相信不少同学模拟过腾讯的QQ做一个聊天应用,至少我是其中一个. 过程中我遇到的一个问题就是QQ输入框,自适应高度,最高高度为3row. 如果你也像我一样打算使用textarea,那么很抱歉,你一开始就 ...

  5. spring注解源码分析--how does autowired works?

    1. 背景 注解可以减少代码的开发量,spring提供了丰富的注解功能.我们可能会被问到,spring的注解到底是什么触发的呢?今天以spring最常使用的一个注解autowired来跟踪代码,进行d ...

  6. PayPal高级工程总监:读完这100篇论文 就能成大数据高手(附论文下载)

    100 open source Big Data architecture papers for data professionals. 读完这100篇论文 就能成大数据高手 作者 白宁超 2016年 ...

  7. iOS 委托与文本输入(内容根据iOS编程编写)

    文本框(UITextField) 本章节继续编辑 JXHypnoNerd .文件地址 . 首先我们继续编辑  JXHypnosisViewController.m 修改  loadView 方法,向  ...

  8. EC笔记:第4部分:22、所有成员都应该是private的

    EC笔记:第4部分:22.所有成员都应该是private的 更简单的访问 用户不用记得什么时候该带上括号,什么时候不用带上括号(因为很确定的就要带上括号) 访问限制 对于public的成员变量,我们可 ...

  9. 浏览器的兼容模式下的button中文字垂直方向不居中显示

    <button style="cursor:pointer;vertical-align: middle;" >删除</button> 这时候垂直不居中. ...

  10. Android Weekly Notes Issue #234

    Android Weekly Issue #234 December 4th, 2016 Android Weekly Issue #234 本期内容包括: ConstraintLayout的使用; ...