一个用C#编写的自动读写配置文件的开源组件

一个用 C# 编写的自动读写配置文件的开源组件
作者 : 肖波
 
摘要

    在项目开发中经常要读写那些以各种格式存放的配置文件,每次为了读写这些文件都要编写一堆代码,非常麻烦。于是最近终于下定决心,写一个自动读写配置文件的组件,以便达到一劳永逸的效果。
 
需求

为了达到自动读写的目的,我们需要满足如下需求:
1、 对于不同格式的配置文件,只需添加相应的配置模式接口实现,就可以使组件自动读取相同格式的配置文件。
2、 可以方便设置不同模式下的参数,比如Ini配置文件,我们需要设置Section, Key,DefautValue等参数。
3、 所有的自动读写过程都在基类中封装实现,使用者无需关心配置文件的格式,也无需象过去那样必须从配置文件中将对应的字段一一读出并逐个赋值给实体中对应字段。使用者只需要从基类派生一个实体类,并定义该实体类中的属性字段就可以了。
4、 根据配置文件,自动生成实体类的工具
5、 支持格式:支持三种通用的配置文件格式,分别是XML,INI和注册表。用户可以参照这三种配置模式,编写自己的特殊格式的模式接口实现。
 
版本规划


V1.0
实现需求1、2、3。并提供XML,INI两种配置文件格式的模式接口实现
V1.1 提供Registry配置格式的模式接口实现
V1.2 提供前三种模式的实体类自动生成工具
 
设计思路





如上图所示整个组件由三部分组成:
Configuration 类是所有配置文件实体类的基类。所有实体类都是这个基类的派生类。
IConfigurationPattern 是配置模式的接口
第三部分是配置模式接口的实现类,目前有两种配置模式 XmlPattern 和 IniPattern。
 
使用简介


XML 格式实体类的实现和使用
 
一个简单的实体类例子:

这个实体类包括两个公有属性Name 和 RandId,其中RandId不希望配置到文件中,所以用 [ConfigurationIgnore] 和 [XmlIgnore]两个属性描述这个字段。其中[ConfigurationIgnore] 属性是本组件提供的属性,可以用于描述任何配置模式下的字段属性。
配置文件名在实体类构造中指明,如果你不希望在构造中指明,你也可以在打开实体类之前的任何时候通过FileName属性动态赋值。

使用实体类的示例代码:
            MyXmlCfg myXmlCfg  =  new  MyXmlCfg();
            myXmlCfg.Open();

            Console.WriteLine(String.Format(
" Name:{0} RandId:{1} " , myXmlCfg.Name, myXmlCfg.RandId));

            myXmlCfg.Close();

使用实体类很简单,只要打开(Open)实体类,组件会自动将配置文件中的数据读取到实体类中。你可以直接使用。
如果你修改了实体类中的公共属性,比如你调用了如下语句 myXmlCfg.Name="MyName",关闭(Close)实体类时,组件会自动将新的配置写入到配置文件中。
你也可以设置你的实体类为制度,myXmlCfg.ReadOnly = true; 只读的实体类,在关闭时不保存配置。

INI 格式实体类的实现和使用
 
一个简单的实体类例子:
ConfigurationPattern 属性中模式必须指定为TPattern.INI,第二个参数是默认Section,必须要指定!

[Section] 属性,这个属性指定对应字段所属的Section,如 [Section("PrivateInfo")],如果不指定这个属性,则认为该字段属于默认Section
[Key] 属性,该属性指定字段在配置文件中的键名,默认值,以及键的大小。如果不指定这个属性,默认为键名为字段名,默认值为实体类初始化时该字段的默认值。

简单使用示例
            MyIniCfg myIniCfg  =  new  MyIniCfg();
            myXmlCfg.ReadOnly 
=  true ;
            myIniCfg.Open();
            Console.WriteLine(String.Format(
" Name:{0} Age:{1}, RandId:{2} " , myIniCfg.Name, myIniCfg.Age, myIniCfg.RandId));
            Console.WriteLine(String.Format(
" ClassName:{0} Year:{1} " , myIniCfg.ClassName, myIniCfg.Year));

            myIniCfg.Close();
使用方法和XML模式的实体类是一样的,其实任何模式的实体类使用方法都是一样的。

添加自己的配置模式实现
 
添加自己的配置模式只需做如下两件事:
1、修改 ConfigurationPatternAttribute.cs 中的TPattern,增加自定义的模式名称
2、模仿我写的两个模式接口实现,写一个自己的接口实现

源码位置
V1.0.1 版本

最新更新
一个用C#编写的自动读写配置文件的开源组件-V1.0.2版本

 
using  System;
using  System.Collections.Generic;
using  System.Text;
using  ConfigurationPattern;
using  ConfigurationPattern.Patterns;

namespace  CfgSample
{
    [ConfigurationPattern(TPattern.INI, 
"DefaultSection")]
    
class MyIniCfg : Configuration
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值