C#开发中使用配置文件对象简化配置的本地保存
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#开发中使用配置文件对象简化配置的本地保存的更多相关文章
- C#开发中使用配置文件
C#开发中使用配置文件对象简化配置的本地保存 0x00 起因 程序的核心是数据和逻辑,开发过程中免不了要对操作的数据进行设置,而有些数据在程序执行过程中被用户或程序做出的修改是应该保存下来的,这样程序 ...
- spring注解开发中常用注解以及简单配置
一.spring注解开发中常用注解以及简单配置 1.为什么要用注解开发:spring的核心是Ioc容器和Aop,对于传统的Ioc编程来说我们需要在spring的配置文件中邪大量的bean来向sprin ...
- c++实现游戏开发中常用的对象池(含源码)
c++实现游戏开发中常用的对象池(含源码) little_stupid_child2017-01-06上传 对象池的五要素: 1.对象集合 2.未使用对象索引集合 3.已使用对象索引集合 4.当前 ...
- ASP.NET网站开发中的配置文件
来源:微信公众号CodeL 1.配置文件层次分类 Machine.config: 对.netframework整体的配置 web.config(framework目录下): 对所有项目所公有的应用 ...
- 【Java_SSM】(三)maven中的配置文件setting的配置
这篇博文我们介绍两方面:如何修改setting.xml文件及相应配置(本文maven版本为3.5.0) (1)首先打开maven文件目录--conf,会看见如下目录 (2)复制setting.xml文 ...
- 关于JavaEE 开发中web.xml的主要配置及其使用
web.xml 中的listener. filter.servlet 加载顺序及其详解 在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人 ...
- 【Swift】ios开发中巧用 description 打印对象时,打印对象的属性
ios开发中我们打印对象的时候,会直接输出对象地址,这样不方便我们开发.我们可以 巧用 description 打印对象时,输出对象的属性 在oc中直接重写即可.swift中需要遵守Printable ...
- 【详细】总结JavaWeb开发中SSH框架开发问题(用心总结,不容错过)
在做JavaWeb的SSH框架开发的时候,遇到过很多的细节问题,这里大概记录下 我使用的IDE是Eclipse(老版本)三大框架:Spring4.Struts2.Hibernate5 1.web.xm ...
- 安卓开发中Spinner控件的使用
在安卓手机应用开发中,Spinner对象常用方法有以下五种. 用法 1 :以资源方式,静态展示 Spinner 选项 用法 2 :以代码方式,动态展示 Spinner 选项 用法 3 :同时显示图片和 ...
随机推荐
- 使用C#处理基于比特流的数据
使用C#处理基于比特流的数据 0x00 起因 最近需要处理一些基于比特流的数据,计算机处理数据一般都是以byte(8bit)为单位的,使用BinaryReader读取的数据也是如此,即使读取bool型 ...
- 使用ServiceStack构建Web服务
提到构建WebService服务,大家肯定第一个想到的是使用WCF,因为简单快捷嘛.首先要说明的是,本人对WCF不太了解,但是想快速建立一个WebService,于是看到了MSDN上的这一篇文章 Bu ...
- Unity游戏内版本更新
最近研究了一下游戏内apk包更新的方法. ios对于应用的管理比较严格,除非热更新脚本,不太可能做到端内大版本包的更新.然而安卓端则没有此限制.因此可以做到不跳到网页或应用商店,就覆盖更新apk包. ...
- 渗透测试工具BurpSuite做网站的安全测试(基础版)
渗透测试工具BurpSuite做网站的安全测试(基础版) 版权声明:本文为博主原创文章,未经博主允许不得转载. 学习网址: https://t0data.gitbooks.io/burpsuite/c ...
- 在线浏览PDF之PDF.JS (附demo)
平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html#skill 下载地址:http://mozilla.gith ...
- Android调用微信登陆、分享、支付
前言:用了微信sdk各种痛苦,感觉比qq sdk调用麻烦多了,回调过于麻烦,还必须要在指定包名下的actvity进行回调,所以我在这里写一篇博客,有这个需求的朋友可以借鉴一下,以后自己别的项目有用到也 ...
- webapi - 模型验证
本次要和大家分享的是webapi的模型验证,讲解的内容可能不单单是做验证,但都是围绕模型来说明的:首先来吐槽下,今天下午老板为自己买了套新办公家具,看起来挺好说明老板有钱,不好的是我们干技术的又成了搬 ...
- mac下安装及配置tomcat
mac下的软件不像windows下的程序那样写注册表,对于tomcat的安装来说,在mac下是名符其实的绿色软件,具体操作如下: 1.到 apache官方主页 下载完整 tar.gz文件包.(没有专门 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- .NET跨平台之旅:将示例站点升级至 .NET Core 1.1 Preview 1
今天微软发布了 .NET Core 1.1 Preview 1(详见 Announcing .NET Core 1.1 Preview 1 ),紧跟 .NET Core 前进的步伐,我们将示例站点 h ...