Farseer.net轻量级开源框架 中级篇:自定义配置文件

发布时间:2017-09-08 23:45:14
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> 将对派生类进行序列化、反序列化的托管。

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:荆州SEO http://jingzhou.raoyu.net

上一篇:php实战第三天
下一篇:最后一页