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

Cinchoo - 将 AppSettings 用作配置源

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2014年12月2日

CPOL

4分钟阅读

viewsIcon

20874

downloadIcon

154

本文展示了如何使用 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 缺少以下功能

  1. 自动类型转换
  2. 源中值的更改通知
  3. 自动将更改后的值保存回源
  4. 类型安全机制
  5. 定义和使用默认值
  6. 自动创建缺失的键值

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”部分下的配置值。

定义三个成员 NameAddress 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>

就是这样。附带了一个示例项目。下载并亲自尝试。

© . All rights reserved.