你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / Web开发
Farseer.net轻量级开源框架 中级篇:自定义配置文件
 
目前系统提供了多个配置文件,一些开发过程中常用到的一些配置。
 
  既然是配置,那么说明一些设置可能会根据项目的不同而有所不同。比如web.config其实就是个配置文件。
 
  当我们定义好配置文件后,在项目运行的时调用了配置,都将在:~/App_Data/  文件夹中生成(如果不存在这个配置文件)。这个大家要记住。
 
系统提供了哪些配置文件
  目前系统提供了(命名空间:FS.Configs):
 
FS.Configs.DbConfigs.cs           // 数据库配置
FS.Configs.GeneralConfigs.cs    // 常规配置
FS.Configs.SystemConfigs.cs       // 系统配置
FS.Configs.RewriterConfigs.cs      // Url重写配置
FS.Configs.EmailConfigs.cs           // 邮件账号配置
FS.Configs.CacheConfigs.cs          // 缓存配置
  先说说如何使用:
 
复制代码
 1         /// <summary>
 2         ///     返回配置的实体
 3         /// </summary>
 4         public static T ConfigInfo
 5 
 6         /// <summary>
 7         ///     保存(序列化)指定路径下的配置文件
 8         /// </summary>
 9         /// <param name="t">Config配置</param>
10         public static bool SaveConfig(T t = null)
复制代码
  这里只有两个方法,一个是读取,另一个是保存。T 是泛型,指的配置类。我们的配置是class 类结构。我们以数据库配置DbConfigs举例
 
复制代码
 1 namespace FS.Configs
 2 {
 3     /// <summary>
 4     ///     全局
 5     /// </summary>
 6     public class DbConfigs : BaseConfigs<DbConfig> { }
 7 
 8     /// <summary>
 9     ///     默认数据库路径
10     /// </summary>
11     [Serializable]
12     public class DbConfig
13     {
14         /// <summary>
15         ///     数据库连接列表,从/App_Data/Db.Configs读取回来
16         /// </summary>
17         public List<DbInfo> DbList = new List<DbInfo>();
18     }
19 
20     /// <summary>
21     ///     数据库连接配置
22     /// </summary>
23     public class DbInfo
24     {
25         /// <summary>
26         ///     数据库连接串
27         /// </summary>
28         public string Server { get; set; }
29 
30         /// <summary>
31         ///     数据库帐号
32         /// </summary>
33         public string UserID { get; set; }
34 
35         /// <summary>
36         ///     数据库密码
37         /// </summary>
38         public string PassWord { get; set; }
39 
40         /// <summary>
41         ///     端口号
42         /// </summary>
43         public string Port { get; set; }
44 
45         /// <summary>
46         ///     Oracle SID
47         /// </summary>
48         public string SID { get; set; }
49 
50         /// <summary>
51         ///     数据库类型
52         /// </summary>
53         public DataBaseType DataType { get; set; }
54 
55         /// <summary>
56         ///     数据库版本
57         /// </summary>
58         public string DataVer { get; set; }
59 
60         /// <summary>
61         ///     数据库目录
62         /// </summary>
63         public string Catalog { get; set; }
64 
65         /// <summary>
66         ///     数据库表前缀
67         /// </summary>
68         public string TablePrefix { get; set; }
69 
70         /// <summary>
71         ///     最小连接池
72         /// </summary>
73         public int PoolMinSize { get; set; }
74 
75         /// <summary>
76         ///     最大连接池
77         /// </summary>
78         public int PoolMaxSize { get; set; }
79 
80         /// <summary>
81         ///     数据库连接时间限制,单位秒
82         /// </summary>
83         public int ConnectTimeout { get; set; }
84 
85         /// <summary>
86         ///     数据库执行时间限制,单位秒
87         /// </summary>
88         public int CommandTimeout { get; set; }
89 
90         /// <summary>
91         ///     通过索引返回实体
92         /// </summary>
93         public static implicit operator DbInfo(int index)
94         {
95             return DbConfigs.ConfigInfo.DbList.Count <= index ? null : DbConfigs.ConfigInfo.DbList[index];
96         }
97     }
98 }
复制代码
  DbConfigs继承了BaseConfigs,泛型传入了DbConfig 的类。而DbConfig类里的属性是List<DbInfo>  这样我们不难看出,因为数据库配置是个多配置的。有时你的项目用了多个不同物理地址的数据库。
 
  假设我们现在有个配置文件,如下图,是存放在~/App_Data/db.config 中的,以XML结构存储(序列化)
 
复制代码
 1 <?xml version="1.0"?>
 2 <DbConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 3   <DbList>
 4     <DbInfo>
 5       <Server>.</Server>
 6       <UserID>sa</UserID>
 7       <PassWord>123456</PassWord>
 8       <DataType>SqlServer</DataType>
 9       <DataVer>2005</DataVer>
10       <Catalog>Farseer</Catalog>
11       <PoolMinSize>16</PoolMinSize>
12       <PoolMaxSize>100</PoolMaxSize>
13       <ConnectTimeout>30</ConnectTimeout>
14       <CommandTimeout>60</CommandTimeout>
15     </DbInfo>
16   </DbList>
17 </DbConfig>
复制代码
  那我们要读取这个配置是,只需要简单的操作即可:
 
1         // 返回数据库配置文件中第1个索引的配置。
2         FS.Configs.DbInfo config = FS.Configs.DbConfigs.ConfigInfo.DbList[0];
  对其重写了操作符号,因此可以更简单的调用,两者是同等的:
 
1         // 返回数据库配置文件中第1个索引的配置。
2         FS.Configs.DbInfo config = 0;
  这样我们就可以读取配置文件的值,来进行调用了。另外也支持写入并保存(序列化)到文件中:
 
复制代码
1         // 返回数据库配置文件中的配置。
2         FS.Configs.DbConfig dbConfig = FS.Configs.DbConfigs.ConfigInfo;
3         // 修改第1个配置文件的Server节点
4         dbConfig.DbList[0].Server = "192.168.1.1";
5         // 添加新的配置
6         dbConfig.DbList.Add(new FS.Configs.DbInfo() { Server = "." });
7         // 保存
8         FS.Configs.DbConfigs.SaveConfig(dbConfig);
复制代码
  读者可能会问,那如果我手动在文件中修改了配置呢?比如在:~/App_Data/db.config 文件 用记事本打开手动修改之后,我要怎么重新读取?
 
  细心的读者会发现,这里只有读取、保存,并没有Reload方法。因为开头也提到了。配置文件是会缓存起来的。
 
  Farseer在每次访问这个缓存之前都做了一个检查,就是检查配置文件的最后保存时间。如果与缓存的文件保存时间不一致,那么就会自动重新去硬盘上读取并缓存哦。
 
 
 
数据库配置 DbConfigs.cs
  上文中已经贴出了类的结构,这里就不重复贴了。在这里提一下一些细节的地方。
 
  DataVer数据库版本:此处填的是:2000、2005、2008 这种格式,有关版本,可以到DbFactory.CreateConnString 查看
 
  TablePrefix表前缀:有可能你的实际物理数据库中的表都有共同的一个前缀。在处此可以设置。
 
常规配置 GeneralConfigs.cs
复制代码
 1 namespace FS.Configs
 2 {
 3     /// <summary>
 4     ///     全局
 5     /// </summary>
 6     public class GeneralConfigs : BaseConfigs<GeneralConfig> { }
 7 
 8     /// <summary>
 9     ///     网站基本设置描述类, 加[Serializable]标记为可序列化
10     /// </summary>
11     [Serializable]
12     public class GeneralConfig
13     {
14         // 此处省略
15     }
16 }
复制代码
  RewriterDomain:重写域名替换(多个用;分隔)  这个是在重写配置文件中使用的。在下几篇的URL地址重写教程中会提到这里的使用。大家知道他是用;分隔的就行了。
 
系统配置 SystemConfigs.cs
复制代码
 1 namespace FS.Configs
 2 {
 3     /// <summary>
 4     ///     系统配置
 5     /// </summary>
 6     public class SystemConfigs : BaseConfigs<SystemConfig> { }
 7 
 8     /// <summary>
 9     ///     配置文件
10     /// </summary>
11     [Serializable]
12     public class SystemConfig
13     {
14         // 此处省略
15     }
16 }
复制代码
  这里的TimeOut的配置。都是有关到Session、Cookies 超时的默认值时间。并且包括了保存KEY的前缀。这样有利于多个项目的不冲突。
 
Url重写配置 RewriterConfigs.cs
复制代码
 1 namespace FS.Configs
 2 {
 3     /// <summary>
 4     ///     全局
 5     /// </summary>
 6     public class RewriterConfigs : BaseConfigs<RewriterConfig> { }
 7 
 8     /// <summary>
 9     ///     重写地址规则
10     /// </summary>
11     [Serializable]
12     public class RewriterConfig
13     {
14         // 此处省略
15     }
16 }
复制代码
邮件账号配置 EmailConfigs.cs
复制代码
 1 namespace FS.Configs
 2 {
 3     /// <summary>
 4     ///     全局
 5     /// </summary>
 6     public class EmailConfigs : BaseConfigs<EmailConfig> { }
 7 
 8     /// <summary>
 9     ///     Email配置信息类
10     /// </summary>
11     [Serializable]
12     public class EmailConfig
13     {
14         /// <summary>
15         ///     Email配置,从/App_Data/Db.Configs读取回来
16         /// </summary>
17         public List<EmailInfo> EmailList = new List<EmailInfo>();
18     }
19 
20     /// <summary>
21     ///     E-mail配置
22     /// </summary>
23     public class EmailInfo
24     {
25         // 此处省略
26     }
27 }
复制代码
缓存配置 CacheConfigs.cs
复制代码
 1 namespace FS.Configs
 2 {
 3     /// <summary>
 4     ///     缓存配置
 5     /// </summary>
 6     public class CacheConfigs : BaseConfigs<CacheConfig> { }
 7 
 8     /// <summary>
 9     ///     缓存配置
10     /// </summary>
11     [Serializable]
12     public class CacheConfig
13     {
14         // 此处省略
15     }
16 }
复制代码
  还记得普通逻辑层:BaseModel中的Data.Cache 属性吗?他们是如何工作的。这个在普通逻辑层里也介绍过了。
 
如何自定义配置
  前面介绍了框架预先写好的一些配置,从这些配置文件里,也容易看出,实质上,只需要大家在写好配置类后,继承BaseConfigs<T>就可以实现配置文件的管理了。
 
  BaseConfigs<T> 将对派生类进行序列化、反序列化的托管。
  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089