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="https://www.w3.org/2001/xmlschema-instance" xmlns:xsd="https://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> 将对派生类进行序列化、反序列化的托管。
上一篇: Flex跳转到JSP或者其他非Flex页面Html代码
下一篇: HTTP 请求报头详解