Cinchoo - 将 AppSettings 用作配置源
本文展示了如何使用 Cinchoo Configuration Manager 来读取 AppSettings 值。
1. 引言
Cinchoo 是一个针对 .NET 的应用程序框架。它提供给用户的主要功能之一就是应用程序配置管理。应用程序配置是应用程序在运行时从源读取和/或写入的信息。
有关 Cinchoo 配置管理器的更多信息,请参阅入门文章 [Cinchoo - 简化的配置管理器]。
在本节中,我将通过示例向您展示如何使用 Cinchoo 配置框架来读取/写入 AppSettings
。它提供了在 .NET 应用程序中加载和使用应用程序设置值的机会。
让我们开始这个练习,使用下面的 appSettings
值(供参考,在使用 Cinchoo 框架时,不必在 App.Config 中显示此部分。它会在应用程序首次启动时自动创建。)
列表 1.1 App.Config 中 AppSettings 的示例值
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="name" value="Mark" />
<add key="address" value="21 River Road, New York, NY 10010" />
<add key="invoiceAmount" value="11.2120001" />
</appSettings>
</configuration>
通常,您可以使用 .NET API 如下方式读取这些值
列表 1.2 使用 .NET API 读取 appSettings
class Program
{
static void Main(string[] args)
{
string name = ConfigurationManager.AppSettings["name"];
string address = ConfigurationManager.AppSettings["address"];
double invoiceAmount = Convert.ToDouble(ConfigurationManager.AppSettings["invoiceAmount"]);
}
}
使用上述方法访问 appSettings
缺少以下功能
- 自动类型转换
- 源中值的更改通知
- 自动将更改后的值保存回源
- 类型安全机制
- 定义和使用默认值
- 自动创建缺失的键值
Cinchoo 开箱即用地提供了上述功能。只需声明一个具有适当成员的类就足以读取 appSettings
值。请继续阅读有关如何实现此目的的信息。
2. 如何使用
- 在此处 下载最新的 Cinchoo 二进制文件。(Nuget 命令:Install-Package Cinchoo)
- 打开 VS.NET 2010 或更高版本
- 创建一个示例 VS.NET (.NET Framework 4) 控制台应用程序项目
- 添加对 Cinchoo.Core.dll 的引用
- 使用
Cinchoo.Core.Configuration
命名空间 - 如下定义一个配置对象“
ApplicationSettings
”
列表 2.1 定义配置对象
[ChoStandardAppSettingsConfigurationSection]
public class ApplicationSettings : ChoConfigurableObject
{
[ChoPropertyInfo("name", DefaultValue="Mark")]
public string Name;
[ChoPropertyInfo("address", DefaultValue = "21 River Road, New York, NY 10010")]
public string Address;
[ChoPropertyInfo("invoiceAmount", DefaultValue = "11.21201")]
public double InvoiceAmount;
protected override void OnAfterConfigurationObjectLoaded()
{
Console.WriteLine(ToString());
}
}
上面的代码说明了如何定义配置对象。首先,从 ChoConfigurableObject
定义一个配置对象(例如 ApplicationSettings
)类,这表明该对象是一个配置对象。并且必须用 ChoStandardAppSettingsConfigurationSectionAttribute
进行装饰才能完成定义。此属性使配置对象能够读取和写入 App.Config 文件中“appSettings
”部分下的配置值。
定义三个成员 Name
、Address
和 InvoiceAmount
作为 public
字段或具有 get
和 set
的属性。用 ChoPropertyInfo
属性装饰它们,以表明它们是配置成员。在此示例中,Name
属性被赋予 name
作为属性名,默认值为“Mark
”。这意味着当配置文件中缺少该值时,此成员将默认为默认值。相应地为每个 appSettings
键声明其他成员。使用属性指定配置成员是一种非常简单明了的方式。
一旦按照上述方式声明了类,就可以通过像创建对象一样简单地访问 appSettings
值了。对该对象和/或 app.Config 文件所做的任何更改都将自动交换。示例如下
列表 2.2 Main 方法
static void Main(string[] args)
{
ApplicationSettings applicationSettings = new ApplicationSettings();
ChoConsole.PauseLine();
}
我们通过创建一个新的 ApplicationSettings
对象实例来开始。就这样。所有加载 appSettings
值到对象的所有繁重工作都由 Cinchoo 框架在后台完成。
只需编译并运行上述示例,它将输出如下
列表 2.3 Test1.exe 的输出
-- ChoStandardAppSettingsConfig.Test.ApplicationSettings State --
Name: Mark
Address: 21 River Road, New York, NY 10010
InvoiceAmount: 11.21201
Press ENTER key to continue...
现在让我们看看应用程序如何反映对 [AppExeName].Config 文件所做的更改。打开 [AppExeName].config 文件,将名称从“Mark
”更改为“Tom
”并保存文件。
列表 2.4 更改 App.Config 文件中的值时 Test1.exe 的输出
-- ChoStandardAppSettingsConfig.Test.ApplicationSettings State --
Name: Mark
Address: 21 River Road, New York, NY 10010
InvoiceAmount: 11.21201
Press ENTER key to continue...
-- ChoStandardAppSettingsConfig.Test.ApplicationSettings State --
Name: Tom
Address: 21 River Road, New York, NY 10010
InvoiceAmount: 11.21201
2. 高级设置
2.1 覆盖 ConfigurationManager
Cinchoo 会根据应用程序的类型自动实例化并使用适当的 ConfigurationManager
。您的应用程序开箱即用,可以无缝地读取和写入 appSettings
。很少情况下,您可能希望覆盖此行为,以便通过使用 ChoConfigurationManager
来控制指定配置文件位置。您可以按以下方式进行操作
列表 2.1.1 覆盖 ConfigurationManager
class Program
{
static void Main(string[] args)
{
ChoApplication.AfterConfigurationManagerInitialized +=
ChoApplication_AfterConfigurationManagerInitialized;
}
static void ChoApplication_AfterConfigurationManagerInitialized(object sender, EventArgs e)
{
ChoConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoaming);
}
}
2.2 外部 AppSettings 文件
你们中的许多人知道,您可以通过 File 属性指定包含应用程序设置的外部文件。Cinchoo 框架也适用于此外部文件。指定的任何作为 appSettings
外部文件路径的文件,如果不存在,将被自动创建,监视任何更改并保存更改等。文件路径可以是相对路径或绝对路径。指定路径相对于应用程序配置文件夹。默认情况下,对于 Windows 窗体应用程序,这将是二进制文件夹(例如 /bin/debug),而不是应用程序配置文件的位置。对于 Web 窗体应用程序,路径相对于应用程序根目录,即 web.config 文件所在的位置。您可以使用上一节所述的 ChoConfigurationManager.OpenExeConfiguration()
方法来控制配置文件位置。
请注意,如果找不到指定的文件,运行时将忽略该属性。
列表 2.2.1 带有 file 属性的示例 AppSettings 部分
<configuration>
<appSettings file="appSettings.xml">
</appSettings>
</configuration>
就是这样。附带了一个示例项目。下载并亲自尝试。