配置应用程序块

来源:百度文库 编辑:神马文学网 时间:2024/04/29 21:34:05
配置应用程序块简介
几乎每个应用程序都需要某种格式的配置信息。这些信息可以像数据库连接字符串一样简单,也可以像多部分、分层的用户首选信息一样复杂。作为一名开发人员,如何存储应用程序的配置数据以及将它们存储在何处是您经常面临的问题。典型的解决方案包含以下内容:

使用配置文件(例如 XML 文件或 Windows .ini 文件)

使用 Windows 注册表

使用诸如 Microsoft SQL Server 这样的数据库
其 中每个选择都有其各自的优点和缺点;没有一种解决方案可以适合所有情况。在一个应用程序中,您可能需要采用多种方法来协调应用程序所需的不同类型的配置数 据。例如,如果您的应用程序运行在不同的环境中,您可能需要支持多种配置存储解决方案。要考虑的其他重要因素包括:确保应用程序配置数据的安全性和完整性,以及将存储解决方案对应用程序性能的影响降到最低程度。
Enterprise Library Configuration Application Block 1.0 版解决了这些问题,并提供了一种可以在所有应用程序中管理配置数据的解决方案。具体地说,配置应用程序块提供了一种灵活的数据模型、一种检索配置数据的简单方法和可扩展性。
配置应用程序块将读/写配置数据的能力与基础数据存储的细节相分离。通过利用存储提供程序和转换器在应用程序和物理存储之间传输数据,可以实现这一点。存储提供程序是可以读/写特定物理存储(例如XML 文件或 SQL 数据库)的对象。转换器可以在应用程序的期望格式(例如一组对象)和存储提供程序的要求格式(例如 XML 文档)之间转换配置信息。应用程序块随附有 XML 文件存储提供程序和 XML 序列化程序转换器。
您可以在包含有配置元数据的文件中定义存储提供程序和转换器。通常,该文件是 Machine.config 文件、App.config 文件或 Web.config 文件。元数据包含一些信息,例如,配置节名称、存储位置以及读/写配置设置时所使用的对象的类型名称。这意味着,您可以通过更改文件中的信息将一种存储类 型更改为另一种,而无需重新编写应用程序。
同样,您可以通过更改同一个文件来更改存储属性,例如其位置。这也不需要修改应用程序代码。在部署和操作期间可以决定在何处存储配置数据。
常见情况
配置应用程序块提供了一个用于读/写应用程序配置数据的简单接口。检索配置数据只需要一行代码。以下示例可从配置文件中检索一个数据库连接字符串。
[C#]string conString = (string)ConfigurationManager.GetConfiguration("connectionstring"); [Visual Basic]Dim conString As String = ConfigurationManager.GetConfiguration("connectionstring")
通过创建允许您使用其他数据存储(例如 Windows 注册表或 SQL数据库)的自定义存储提供程序,可以扩展配置应用程序块。通过更改配置元数据文件,可以将这些自定义提供程序添加到配置应用程序块中。您无需修改或重新构建配置应用程序块,即可使用不同的存储。您还可以添加自定义转换器来为应用程序和存储转换配置数据。
1.0 版本的主要特点
Enterprise Library Configuration Application Block 1.0 版使用企业程序库配置控制台来管理配置设置。它还允许您添加自己的存储提供程序和转换器。
从配置管理应用程序块迁移
Enterprise Library Configuration Application Block 1.0 版与配置管理应用程序块之间有明显的区别:

该版本的应用程序块支持在 XML 文件中存储配置数据。如果您已经使用了其他类型的数据存储(例如 Windows 注册表或 SQL 数据库),那么您可以创建自定义的存储提供程序和转换器,也可以将数据转换为 XML。

不再支持用名称/值对来表示配置数据,也不再支持哈希表序列化。要将配置数据读入应用程序或者将其写到配置文件中,您需要声明一个包含这些数据的类。该类应该能够使用转换器的输出。
配置应用程序块的依赖项
配置应用程序块依赖于企业程序库中包含的代码,包括通用程序库功能(例如,规范),它提供了各种功能来公开用于系统管理的事件和数据。
此外,应用程序块还使用 XML 文件来存储配置信息。修改这些信息的推荐方法是使用企业程序库配置控制台。
返回页首
配置应用程序块的设计
配置应用程序块旨在实现以下目标:

提供一个用于读/写配置数据的简单接口

将应用程序和配置数据的物理存储位置相分离

提供一种允许自定义存储位置和配置设置的运行时表示的可扩展模型
设计要点
图 1 展示组成配置应用程序块的类和对象之间的关系。该图假定您使用XML 文件存储提供程序和转换器,它们包含在应用程序块中。XML 文件存储提供程序以文件的形式存储配置数据。(其他提供程序使用其他形式的存储,例如 Windows 注册表。)XmlFileStorageProvider 对象指向一个包含特定配置节的配置设置的文件。ConfigurationBuilder 对象指向一个包含特定配置节的配置元数据的文件。通常,包含配置元数据的文件名为App.config(对于基于 Windows 的应用程序)或Web.config(对于基于 Web 的应用程序)。

图 1. 配置应用程序块的设计
配 置应用程序块将配置元数据和实际的配置设置分隔开来。应用程序块将元数据放在它自己的文件中,而该文件独立于存储配置设置的位置。配置设置经过分组并称为 配置节。应用程序使用的每个企业程序库应用程序块都有其自己的配置节,该配置节存储在其自己的文件中。配置应用程序块使用配置元数据来访问配置中的数据。
元数据指向配置存储位置并包含一些信息,例如,配置应用程序块读/写配置数据所需的转换器和存储提供程序的类型。配置元数据文件被分成节。每一节都包含在配置存储位置读/写一组特定的配置设置所需的信息。
ConfigurationManager 类提供一个在所定义的存储位置读/写特定配置节的配置设置的静态外观。ConfigurationManager 对象从应用程序域配置文件读取配置元数据,然后使用这些信息来读/写配置节信息。
ConfigurationManager 类的静态方法使用ConfigurationBuilder 对象的实例。ConfigurationBuilder 可创建文件存储提供程序和转换器对象。这些对象可管理配置数据和元数据。
IStorageProviderReader 接口定义了用于从存储位置读取配置信息的接口。IStorageProviderWriter 接口实现了 IStorageProviderReader 接口,还定义了用于写入配置信息的接口。配置应用程序块包含一个支持该接口的提供程序XmlFileStorageProvider,它在一个 XML文件中读/写配置数据。
ITransformer 接口可转换应用程序和存储提供程序之间的配置设置对象。配置应用程序块包含一个实现该接口的提供程序,即XmlSerializerTransformer 类。XmlSerializerTransformer 类实现了应用程序定义的运行时对象和XmlNode 对象之间的转换,而无需应用程序来配置转换器。如果没有转换器,配置设置对象就会以存储提供程序提供的相同格式返回到应用程序。
每个配置节的设置都缓存在一个哈希表中。当客户端请求配置数据时,ConfigurationBuilder 对象会在缓存中查找数据。如果在缓存中找到配置数据,ConfigurationBuilder 对象就不必访问存储中的配置数据。如果文件存储提供程序检测到存储中的配置数据已经更改,则 ConfigurationBuilder 对象就会清除缓存。ConfigurationManager 对象允许应用程序清除全部缓存,或者只清除给定节名的缓存。如果清除了缓存,则下一个读取操作就会访问存储位置中的配置设置。
总之,设计了配置应用程序块,您就可以用最适合应用程序要求的方式将配置数据存储在应用程序中。您不受存储方法的限制。IStorageProviderReader 与 IStorageProviderWriter 接口以及 ITransformer 接口(可选)将内存表示和物理存储中使用的表示分离开来。