动态【配置文件】之实现(一)

  上次,我们分析了“动态”配置文件的基本需求,也基本定下了设计思路。我们今天就来实现第一要素:读写配置文件

  按照我们上次的分析要求,我设计了以下几个类

ConfigManager,【配置文件管理类】

Config,【单个配置文件】

ConfigSection,【配置文件中的单个程序节】

三个类依次包含,为了方便程序调用,为此,设计了三个接口,分别由三个类来实现。这样一来,外部调用的程序,只需要知道接口,而不需要引用这个类;

部分定义代码

IConfigManager定义

IConfigManager
 1     /// <summary>
 2     /// 配置文件管理接口
 3     /// </summary>
 4     public interface IConfigManager
 5     {
 6         /// <summary>
 7         /// 增加配置文件
 8         /// </summary>
 9         /// <param name="pCfg">配置文件</param>
10         void AddConfig(IConfig pCfg);
11         /// <summary>
12         /// 删除配置文件
13         /// </summary>
14         /// <param name="pCfg">配置文件</param>
15         void DeleteConfig(IConfig pCfg);
16         /// <summary>
17         /// 定位配置文件
18         /// </summary>
19         /// <param name="pName"></param>
20         /// <returns></returns>
21         IConfig FindConfig(string pName);
22         /// <summary>
23         /// 配置文件是否存在
24         /// </summary>
25         /// <param name="pName"></param>
26         /// <returns></returns>
27         bool HasExist(string pName);
28         /// <summary>
29         /// 默认配置文件后缀
30         /// </summary>
31         string DefaultEx
32         {
33             get;
34             set;
35         }
36         /// <summary>
37         /// 默认配置文件存放位置
38         /// </summary>
39         string DefaultFolder
40         {
41             get;
42             set;
43         }
44         /// <summary>
45         /// 加载目录下的所有配置文件
46         /// </summary>
47         void Load();
48         /// <summary>
49         /// 当前的配置文件
50         /// </summary>
51         IConfig CurrentConfig
52         {
53             get;
54             set;
55         }
56     }

 

IConfig定义

 

代码
 1     /// <summary>
 2     /// 单个配置文件
 3     /// </summary>
 4     public interface IConfig
 5     {
 6         /// <summary>
 7         /// 配置文件名称
 8         /// </summary>
 9         string Name
10         {
11             get;
12             set;
13         }
14         /// <summary>
15         /// 增加程序节
16         /// </summary>
17         /// <param name="pCfgSec"></param>
18         void AddSection(IConfigSection pCfgSec);
19         /// <summary>
20         /// 删除程序节
21         /// </summary>
22         /// <param name="pCfgSec"></param>
23         void DeleteSection(IConfigSection pCfgSec);
24         /// <summary>
25         /// 定位程序节
26         /// </summary>
27         /// <param name="pName"></param>
28         /// <returns></returns>
29         IConfigSection FindSection(string pName);
30         /// <summary>
31         /// 查询程序节是否存在
32         /// </summary>
33         /// <param name="pName"></param>
34         /// <returns></returns>
35         bool HasExist(string pName);
36         /// <summary>
37         /// 直接读取某个程序节下的设置
38         /// </summary>
39         /// <param name="pSectionName"></param>
40         /// <param name="pKeyName"></param>
41         /// <param name="pDefaultValue"></param>
42         /// <returns></returns>
43         object ReadKeyValue(string pSectionName, string pKeyName, object pDefaultValue);
44         /// <summary>
45         /// 写入某个程序节下,如果此程序节不存在,将创建
46         /// </summary>
47         /// <param name="pSectionName"></param>
48         /// <param name="pKeyName"></param>
49         /// <param name="pValue"></param>
50         void WriteKeyValue(string pSectionName, string pKeyName, object pValue);
51         /// <summary>
52         /// 加载文件,读取全部配置
53         /// </summary>
54         /// <param name="pFileName"></param>
55         void LoadfromFile(string pFileName);
56         /// <summary>
57         /// 设置保存到文件
58         /// </summary>
59         void SaveToFile();
60         /// <summary>
61         /// 自动保存
62         /// </summary>
63         bool AutoSave
64         {
65             get;
66             set;
67         }
68         /// <summary>
69         /// 是否开启文件监测
70         /// </summary>
71         bool Watched
72         {
73             get;
74             set;
75         }
76         /// <summary>
77         /// 此配置文件的文件路径
78         /// </summary>
79         string FileName
80         {
81             get;
82             set;
83         }
84     }

 

IConfigSection定义

 

代码
    /// <summary>
    
/// 配置分类
    
/// </summary>
    public interface IConfigSection
    {
        
string SectionName
        {
            
get;
            
set;
        }
        
void Add(string pKeyName, object pKeyValue);
        
void Delete(string pKeyName);
        
object ReadKeyValue(string pKeyName, object pDefaultValue);
        
void WriteKeyValue(string pKeyName, object pValue);
        
void SaveToFile();
    }

 

 

由于本次采用ini文件作为配置文件的载体,所以,在读写上就省略了很多方法。甚至在IConfig接口上提供了读写方法,但为了XML文件之类的读写,还是提供了方法定义。

(未完待续...)

posted @ 2010-05-16 20:55  feedback  阅读(1251)  评论(1编辑  收藏  举报