65.9K
CodeProject 正在变化。 阅读更多。
Home

自定义配置类

starIconstarIconstarIconstarIconstarIcon

5.00/5 (3投票s)

2014年5月18日

CPOL

3分钟阅读

viewsIcon

9513

downloadIcon

120

本文介绍了一个类似于 CSS 的配置类。

引言

本文介绍了一个简单的配置读取器,它使用类似于 CSS 的语法进行配置。其主要目的是为特定环境的应用程序提供配置数据。例如,为生产环境和开发环境维护单独的配置文件是很常见的做法。然而,在某些情况下,你可能希望将不同环境的配置数据合并到一个配置文件中。这可能是因为你需要访问开发环境中的生产设置,或者因为这些环境几乎具有相同的设置,只有少数差异。

因此,我开发了一个使用类似于 CSS 语法的配置读取器,以便可以轻松地克隆配置文件中的部分并覆盖属性。以下是配置文件的摘录。

@dev {
    DbHost : localhost
    DbName : dbname
    DbUid : root
    DbPwd : pass
}

@clone {
    live : dev
}

@live {
    DbHost : remote.db.com
} 

上面的配置数据包含三个部分。部分以 @ 符号开头,部分属性包含在花括号中。为了使部分有效,必须将闭合花括号放在新的一行上。请注意,部分属性类似于 CSS 属性。@clone 部分是一个特殊的指令。其目的是克隆具有新部分名称的现有部分的设置。在上面的示例配置中,已声明一个名为“dev”的部分,用于开发环境。 “dev”部分公开了用于数据库连接的属性。与其为生产环境创建一个新部分(可能与开发环境共享一些属性),不如使用 @clone 部分来克隆开发环境。  克隆后,可以覆盖属性并向克隆的部分添加新属性。克隆部分时,新的部分名称必须位于 ':' 的左侧,要克隆的部分位于右侧。可以通过将克隆放在新的一行上克隆多个部分。

@clone {
    live : dev
    live2 : live
} 

还存在另一个特殊的节指令,可以从另一个配置文件导入配置节。例如,你可能有一个用于应用程序特定设置的 app.cf 配置文件和一个用于用户设置的 user.cf 配置文件。与其维护两个单独的配置文件,不如使用 @import 指令将两个文件合并到一个 config 文件中。

@import {
    User : path to user.cf file
} 

在上面的示例中,User 属性是user.cf 文件中要导入的部分。可以通过将 import 语句放在 @import 部分内的新行上导入多个部分。或者,可以使用通配符“*” 导入所有部分,如下所示。

@import {
    * : path to user.cf file
}

Using the Code

创建一个 xConfiguration 类的新实例。必须将配置文件传递给类的构造函数。

xConfiguration config = new xConfiguration("path to config.cf");

要访问部分属性,请使用 GetProperty(sectioName, propertyName) 方法。

Console.WriteLine(config.GetProperty("dev", "DbHost"));

为了方便起见,可以使用 GetSection(sectionName) 方法返回部分属性。

var dev = config.GetSection("dev");

GetSection() 方法返回一个 Dictionary<string, string> 对象。

最后,可以使用 GetSectionNames 属性返回所有部分名称的集合。

这标志着本文的结束。 请随时留下您的评论和建议。

历史

  • 2014 年 5 月 18 日:初始版本
© . All rights reserved.