111

来源:互联网 发布:linux nat 端口转发 编辑:程序博客网 时间:2024/05/04 17:22
Enterprise Library 在各种情况下都非常有用:
  • Enterprise Library 提供足够的功能以支持企业应用程序必须解决的许多普通场景。
  • Enterprise Library 可以做为一个基本的定制库,可以利用合并在每个应用程序块中的扩展点,用提供新的提供程序来扩展应用程序块。也可以修改已有的应用程序块的源码来加入新的功能。最后,可以添加新的应用程序块到 块到 Enterprise Library 中。你可以选择自己为已存在的应用程序块添加扩展或新的应用程序块,或者使用由其他人开发的扩展和应用程序块。
  • Enterprise Library 是经过很好的设计的,所以它的应用程序块可以相互之间功能独立。只需要将使用的应用程序块添加到应用程序中,而不用添加整个库。
  • Enterprise Library 包含应用程序块的源码,这意味着可以修改源码以合并到你的库中,或者在其他应用程序块或者你构建的应用程序使用某部分的 Enterprise Library 源码。
  • Enterprise Library 包含有文档、快速入门示例和源码,这意味着你可以把库做为学习架构、设计和代码最佳实践的工具。

编辑

使用 Enterprise Library 二进制

Enterprise Library 的早期版本要求构建源码。Enterprise Library 3.1 包含了所有源码的预编译强命名程序集,程序集的版本号为 3.1.0.0 。它们由一个不包含在发行中的 Microsoft 强名称密钥所签名。这意味着不能用同样的公开密钥从源码中构建一个编译的版本,然而,可以用自己的密钥对创建强名称程序集。如果你确定已定制了 Enterprise Library 源码,你将使用从源码和自己的密钥编译的二进制来代替由 Microsoft 密钥签名的预编译二进制。

顶部



编辑

构建 Enterprise Library

尽管 Enterprise Library 包含了所有源码的二进制,但你也许打算定制源码,这意味着需要自己构建 Enterprise Library ,以下章节讨论了如何来构建。在得到二进制以后,也许还要强命名它们,关于这个主题的更详细的信息,请参阅强命名 Enterprise Library 程序集。

安装源码

可以使用源码安装程序安装所有的 Enterprise Library 源码。在运行安装程序时,可以选择安装其中之一或者所有以下条目:应用程序块、应用程序块软件工厂、强命名向导包和快速入门。

运行源码安装程序
  1. 单击开始,指向程序,指向Microsoft patterns & practices,然后单击Enterprise Library 3.1 – May 2007。
  2. 选择Enterprise Library Source Code Installer,然后跟着指令开始安装。

Enterprise Library Visual Studio 解决方案文件

Enterprise Library 源码包含了几个 Visual Studio 项目。Enterprise Library 包含多个 Visual Studio 2005 解决方案文件,其中三个解决方案文件包含了 Enterprise Library 内核和所有应用程序块的项目,除去确定非标准依赖的项目(见表1)。可以使用这些解决方案文件构建整个 Enterprise Library ,或者创建一个解决方案文件仅包含需要构建的项目。当构建 Enterprise Library 时,内核和配置控制台将自动构建。

表 2.1. 解决方案文件
配置描述
EnterpriseLibrary.sln包含整个应用程序块项目集、Enterprise Library 核心项目和配置控制台。不包括单元测试项目。
EnterpriseLibrary.VSTS.sln包含整个应用程序块项目集、Enterprise Library 内核项目和配置控制台。包括用 Visual Studio Team System 执行的所有单元测试。
EnterpriseLibrary.Nunit.sln包含整个应用程序块项目集、Enterprise Library 内核项目和配置控制台。包括用 NUnit 运行的所有单元测试。解决方案文件包含用于强命名程序集的源码,包括应用程序块工厂。

另外,每个程序集都有二个解决方案文件,一个解决方案文件包含 NUnit 单元测试,另一个包括 Visual Studio Team System (VSTS) 单元测试。这些解决方案文件包括所有的项目,以及用于应用程序块的提供程序项目。它们还包括配置设计时项目,配置设计时程序集是运行配置控制台所必要的,但它们在部署和运行应用程序时不是必要的。

更多信息,请参见 Enterprise Library 配置控制台。

注意:

安全应用程序块包括一个用于授权管理器(AzMan)的授权提供程序,这个提供程序需要安装 AzMan ,以及 Interop 程序集 Microsoft.Interop.Security.AzRoles.dll。Enterprise Library 解决方案文件并不包括用于 AzMan 授权提供程序的运行时和设计时项目。如果要编译 AzMan 提供程序项目,可以修改 Enterprise Library 解决方案文件或者使用安全应用程序块解决方案文件。

同样,Enterprise Library 解决方案文件不包含下列运行时和设计时项目:
  • ExceptionHandling.WCF
  • Validation.Integration.WCF
  • Data.SqlCe

这些项目分别可以在相应的应用程序块的解决方案文件中找到。

构建配置

Enterprise Library 解决方案文件包括二个构建配置:Release 和 Debug 。所有项目都在一个解决方案文件中,包括单元测试项目,都在二个配置下编译。

构建 Enterprise Library 应用程序块和工具

有二种方法可以构建 Enterprise Library 应用程序块和工具,可以使用批处理文件或 Visual Studio 解决方案文件之一。

用批处理文件构建 Enterprise Library

在安装 Enterprise Library 时,安装程序在开始菜单上创建了一个菜单项为Build Enterprise Library,单击这个菜单项可以编译 Debug 版本的应用程序块和工具。还有一些批处理文件构建 Enterprise Library 并复制结果程序集到合适的位置,这些批处理文件安装在 Enterprise Library 安装目录下的 src 子目录下。

批处理文件如下:

  • BuildLibrary.bat。编译所有应用程序块和工具。在不带参数加载时,它构建 Debug 版本的应用程序和工具。它接受一个指明可选构建类型的参数,例如 Relaese 。
  • CopyAssemblies.bat。复制程序集到 bin 目录。当不带参数加载时,它复制 Debug 版本的程序集到 INSTALLDIR/Program Files/Microsoft Enterprise Library/bin 目录。它接受二个参数,第一个参数指明可选的构建类型,第二个参数指出程序集要复制到的目标目录。
  • BuildLIbraryAndCopyAssemblies.bat。顺序执行 BuildLibrary.batCopyAssemblies.bat

用 Visual Studio 解决方案文件构建 Enterprise Library

也可以用 Visual Studio 解决方案文件编译应用程序块和工具。在 Visual Studio .NET 2005 中打开EnterpriseLibrary.VSTS.sln 或者 EnterpriseLibrary.Nunit.sln解决方案文件。在 Build 菜单上,单击 Build Solution。解决方案文件包括整个应用程序块、可选的提供程序、通用程序集和工具的项目集。

解决方案文件不复制程序集到 bin 目录,可以运行 CopyAssemblies.bat 来复制程序集到 bin 目录。开始菜单项目的 Copy assemblies to bin folder 加载此批处理文件。

注意:安装度量模式(instrumentation schema),可以运行InstallServices.bat 批处理文件,或者使用开始菜单上的 Install Instrumentation 快捷方式。要使用快捷方式,单击开始,指向 Microsoft patterns & practices,指向 Enterprise Library 3.1 – May 2007,然后单击 Install Instrumentation

用法提示

这些是构建 Enterprise Library 时的其他关注点:
  • 配置控制台要求应用程序块的程序集与配置控制台可执行程序(EntLibConfig.exe)放置在同样的目录中,它同时要求有运行时程序集和设计时程序集。每个应用程序都打包设计时支持到与运行时实现分开的程序集中,运行使用应用程序块的程序不要求有这些程序集。然而,当使用配置控制台修改应用程序块的配置时是需要它们的。所有必要的程序集都有后缀 .configuration.design.dll。用 CopyAssemblies 批处理文件放置程序集到 bin 目录中。
  • Enterprise Library 配置控制台保存完整的类型限定信息到应用程序的配置文件中,当和未签名的应用程序块一起使用 Enterprise Library 控制台时,用于完整类型限定信息的 PublicKeyToken 值将为 null 。如果重新构建应用程序块并签名程序集,将不得不修改已有的应用程序配置文件以合并正确的 PublicKeyToken 值。如果没有这么做,应用程序将使用错误版本的应用程序块程序集。可以使用配置控制台打开和保存修改的配置文件。配置控制台使用签名的应用程序块版本。另一种替代方法是,可以手工修改配置文件并修改 PublicKeyToken 的值。
  • 安全应用程序块包含一个用于授权管理器(AzMan)的授权提供程序,这个提供程序需要安装 AzMan 并且要求有 Interop 程序集 Microsoft.Interop.Security.AzRoles.dll。如果没有与 Interop 程序集一起在本地安装 AzMan,在构建安全应用程序块解决方案文件时将得到一条错误信息,错误信息指出名为“Interop”的类型或命名空间不存在类或命名空间 “Microsoft.”中。这个错误出现在没有安装 AzMan 时,可以忽略。安全应用程序块将成功构建,但 AzMan 提供程序将不可用。
  • Enterprise Library 解决方案文件不包含下列运行时和设计时项目:
    • ExceptionHandling.WCF
    • Validation.Integration.WCF
    • Data.SqlCe
这些项目分别可以在相应的应用程序块的解决方案文件中找到。

构建快速入门

快速入门项目不包括在 Enterprise Library 解决方案文件中,每个快速入门都有一个包含快速入门项目和所有必要的应用程序块项目的解决方案文件。要构建快速入门,在 Visual Studio .NET 2005 中打开特定快速入门的解决方案文件,然后单击 Build 菜单上的 Build Solution

顶部



编辑

强命名 Enterprise Library 程序集

如果你要构建 Enterprise Library ,你也许要强命名程序集。一个强命名由程序集的标识组成,标识包括它的简单文本名称、版本号和文化信息(如果它支持的话),加上公钥和数字签名。它使用相应的私钥从一个程序集文件(文件包含程序集清单,它依次包含名称和生成程序集的所有文件的哈希)生成。用一个强名称签名一个程序集,以确定名称是全局唯一的。有一样的强名称的程序集应该是一样的。

例如,如果打算在多个程序集之间共享 Enterprise Library 程序集,可以安装它们到全局程序集缓存中。在全局程序集缓存中的每个程序集,必须有一个全局唯一的名称,这可以用一个强名称来确定它。即使仅在单一的应用程序中使用程序集,也可以强命名程序集以保证应用程序使用了正确的程序集版本。

强名称可以满足下列需求:
  • 强名称保证名称的唯一依赖于唯一的密钥对。没有人能生成同样的程序集名称,而你可以,因为用一个私钥生成的程序集有不同的名称要好过用另一个私钥生成程序集。
  • 强名称保护程序集的版本系。强名称可以确保没有谁可以产生你的程序集的子序列版本。用户可以确认他们加载的程序集版本,与应用程序构建所使用的版本来自同一发布者。
  • 强名称提供了强完整检查。通过 .NET Framework 安全性检查可以保证程序集的内容在它构建后没有被修改过。然而,要注意的是强名称的所在和它们自己并不隐含信任级别,例如,数字签名和支持证书所提供的级别。

关于部署程序集到全局程序集缓存中的信息,请参见用程序集和全局程序集缓存工作

使用强名称向导包

因为大量项目和让单元测试程序集访问应用程序块程序集的内部类型、成员的[InternalsVisibleTo]属性的包含,强命名 Enterprise Library 程序集是困难且耗时的。此 Enterprise Library 发行包含了预编译、强命名的程序集,但如果你打算定制代码的话,你依然想要自己强命名程序集。Enterprise Library 的此发行包含了一个与 Visual Studio 集成的强命名向导包。它自动处理项目的强命名集合,也修改任何 [InternalsVisibleTo] 属性以包含一个公钥。这个向导包对 Enterprise Library 特别有用,但它也可以用于其他 .NET Framework 解决方案。

向导包包含下列功能:
  • 创建强名称密钥对文件。此方法创建一个公/私钥对。如果你还没有打算用于签名程序集的密钥对文件,可以首先使用此方法。
  • 强命名此解决方案或解决方案目录中的所有项目。此方法用一个密钥对文件以强命名整个解决方案或解决方案中的一个项目。如果你从解决方案根中选择方法,在解决方案中的所有项目都将被强命名。你也可以用选择特定项目的方法选择你要强命名的项目。

使用强命名向导包
  1. 打开 Visual Studio;
  2. 打开包含要强命名的项目的解决方案;
  3. 工具 菜单上,单击 Guidance Package Manager
  4. Guidance Package Manager 对话框中,单击Enable/Disable Packages
  5. Enable and Disable Packages 对话框中,选择要使之可用的包;
  6. 单击 OK
  7. Guidance Package Manager 对话框中,单击关闭。

创建密钥对文件
  1. 右单击一个项目文件夹;
  2. 单击 Create a new strong-name key pair file
  3. Create Key Pair for Strong Naming 对话框中,输入密钥对文件名;
  4. 单击 Finish

在拥有一个密钥对文件后,就可以强命名在文件中的项目了。

强命名一个项目
  1. 在一个项目上右单击;
  2. 单击 Strong-name all projects in this solution or solution folder
  3. Strong-Name Projects in Solution 对话框中,输入密钥对文件的名称或者导航到它并选择它。
  4. 如果想要向导包自动用公钥更新 [InternalsVisibleTo] 属性,选择 Update InternalsVisibleTo
  5. 单击 Finish

使用 Visual Studio 强命名 Enterprise Library 程序集

如果不打算使用强命名向导包,可以使用 Visual Studio 强命名 Enterprise Library 程序集。要用强名称来签名程序集,必须要有一个公/私钥对,此公开和私有的加密钥用于在编译时创建强命名程序集。如果多个开发者使用 Enterprise Library ,他们将使用同一强命名程序集,这意味着每个人都使用同一个密钥对来签名程序集。第三个过程描述了如何将一个公钥签名到程序集中。最后一个过程描述如何更新InternalsVisibleTo属性。

创建密钥对
  1. 在 Visual Studio 命令提示符下,跳转到将要保存密钥对的目录;
  2. 输入 sn –k keyfile.snk 以创建一个密钥对。

注意:也可以在 Visual Studio 2005 中使用 CreateStrongName 对话框创建一个密钥对。要访问此对话框,在解决方案浏览器中选择一个项目节点。在项目菜单中,单击属性。当项目设计器出现时,单击签名标签。在签名页中,选择为程序集签名,然后在选择强名称密钥文件的下拉框中选择新建

必须从密钥对中提取出公钥(公钥需要用于InternalsVisibleTo 属性)。以下过程说明了如何提取公钥并显示它。

提取并显示公钥
  1. 在命令提示符下,输入 sn –p keyfile.snk publickey.pk 来从密钥对是提取公钥;
  2. 输入 sn –tp publickey.pk 以16进制的格式显示公钥。保持配置控制台窗口打开或者复制到一个文本文件中。

下一过程描述了如何签名一个密钥到 Enterprise Library 程序集中。打开EnterpriseLibrary.VSTS.sln 或EnterpriseLibrary.NUnit.sln解决方案文件。(这依赖于你安装了哪个 Visual Studio 版本)每个项目都按照这些步骤做,包括单元测试和设计项目。

签名一个公钥到一个项目中
  1. 在 Visual Studio 中,在解决方案浏览器中选择项目节点。在项目菜单上选择属性(或者在解决方案浏览器中右单击项目节点,选择属性)。
  2. 在项目设计器中,单击签名标签。
  3. 选择为程序集签名复选框。
  4. 选择强名称密钥文件的下拉框中选择浏览
  5. 选择文件对话框中,导航到创建的密钥文件或者在文件文本框中输入它的路径,单击打开来选择它。
  6. 关闭属性窗口并保存修改。

程序集中的应用程序块单元测试是与应用程序块的程序集分离的。要让单元测试程序集访问应用程序块程序集的内部类型和成员,应用程序块使用了 InternalsVisibleToAttribute 属性。必须更新此属性以包含强命名程序集的公钥。

更新 InternalsVisibleTo 属性
  1. 在 Visual Studio 中,指向 编辑 菜单中的查看和替换,然后单击在文件中查找
  2. 在整个解决方案中搜索 InternalsVisibleTo 属性。
  3. 对每个 InternalsVisibleTo 执行下列步骤:
  4. 复制从密钥对文件中提取出的完全的公钥(不是令牌)。
  5. 添加公钥到属性中,就像如下示例:
[assembly: InternalsVisibleTo("Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Tests,PublicKey=00240000048000009400000006020000002400005253413100040000010001008B3B735C2738A3A3518083C40A3AF8518DBA6D299F0DB7883A9BE2BFF1343B72A65A04EE8DEACF3A2A5B240126C1E803D14FEEDAC508DE566251756E0EAD6323D1C2B121B24904FEE55086CF1ACBD1146194603421DC0E13D9DC486422180ED756CCDADF31C0B7E4F58FAC82C867F26D8D886A45FF503D7B62BCB24A160C64F8")]

注意:公钥必须输入在一行中,当从命令提示符窗口复制它时,它是在多行中的(就像此示例)。当你更新 InternalsVisibleTo 属性时将它放在一行中。

6. 保存修改的每个文件。
7. 重新构建整个解决方案。

顶部



编辑

添加应用程序代码

Enterprise Library 包含了应用程序块的源码,可以在应用程序中包含源码或者编译应用程序块并使用编译后的程序集。对于如何编译应用程序块的介绍,请参阅编译应用程序块。在应用程序中使用 Enterprise Library 程序集之前,必须添加到相应应用程序块程序集和 Common 程序集的引用。要编写应用程序代码,必须注意 Enterprise Library 命名空间的协定和对象创建模式。 引用 Enterprise Library 程序集

在构建混有 Enterprise Library 应用程序块的应用程序之前,必须添加对应用程序块、CommonObjectBuilder 程序集的引用。这是为应用程序使用 Enterprise Library 做准备。小心的选择程序集,是决定使用 Microsoft 强命名程序集、非强命名程序集还是一个定制的 Enterprise Library 程序集集合。

为应用程序做准备
  1. 添加对应用程序块程序集的引用。在 Visual Studio 中,右单击解决方案浏览器中的项目节点,然后单击添加引用,单击浏览标签,然后找到应用程序块程序集的位置(脚本CopyAssemblies.bat可以复制所有应用程序块到 bin 子目录中),选择程序集,然后单击确定添加引用。例如,要引用缓存应用程序块程序集,浏览到 bin 子目录,选择程序集 Microsoft.Practices.EnterpriseLibrary.Caching.dll ,然后单击确定。
  2. 使用同样的过程添加对Enterprise Library Common 程序集 Microsoft.Practices.EnterpriseLibrary.Common.dll 和对 ObjectBuilder 程序集 Microsoft.Practices.ObjectBuilder.dll

Enterprise Library 命名空间

所有应用程序块都遵守同样的命名空间约定,Enterprise Library 所有代码都被包含在根命名空间 Microsoft.Practices.EnterpriseLibrary 下。

所有应用程序块包含在此根下的它自己的命名空间中。例如,安全应用程序块使用 Microsoft.Practices.EnterpriseLibrary.Security 命名空间。

复杂的应用程序块可能包含子命名空间,但仅在如果这对改进可读性来说是必要的。例如,数据访问应用程序块的 SQL Server 部分使用 Microsoft.Practices.EnterpriseLibrary.Data.Sql 命名空间。

要不带完全精确元素引用使用来自应用程序块中的元素,在源码文件顶部添加 using 语句(C#)或 import 语句 (Visual Basic .NET)。例如要不带完全精确元素引用使用来自缓存应用程序块的元素,在源文件顶部使用下列 using 语句(C#)或 import 语句(Visual Basic.NET )。

C#
using Microsoft.Practices.EnterpriseLibrary.Caching;using Microsoft.Practices.EnterpriseLibrary.Caching.Expirations;

Visual Basic .NET
Imports Microsoft.Practices.EnterpriseLibrary.CachingImports Microsoft.Practices.EnterpriseLibrary.Caching.Expirations

注意:对于 Visual Basic 项目,项目设计器的引用页来管理引用和导入的命名空间。要访问引用页,在解决方案浏览器中选择项目节点,然后在项目菜单上单击属性,当项目设计器出现时,选择引用标签。

创建应用程序块对象

Enterprise Library 内核提供了创建对象的支持,创建对象要求有配置信息。图1说明了这些对象是如何用 Enterprise Library 内核构建的。

应用程序块工厂使用 Enterprise Library 内核

应用程序块工厂使用 Enterprise Library 内核


使用静态工厂方法

Enterprise Library 应用程序块包含静态工厂方法,可以用来创建应用程序块对象。这些静态方法实现了工厂模式以实例化提供程序。这意味着如果应用程序使用了这些静态工厂方法的话,它们在创建时就不需要任何关于提供程序的特定实现的信息。下列代码显示了应用程序使用数据访问应用程序块的 DatabaseFactory 类来创建一个 Database 对象。

C#
Database db = DatabaseFactory.CreateDatabase("Northwind");

Visual Basic .NET
Dim db As Database = DatabaseFactory.CreateDatabase("Northwind")

Database类是一个抽象类,并为提供程序的实现提供了通用的接口。静态方法 CreateDatabase 返回一个特定实现类型对象(例如,SqlDatabase 对象。)返回的对象类型由应用程序配置信息所决定。

静态方法使用来自默认配置源的配置信息,可以使用配置控制台来为应用程序配置定义默认配置源。如果不定义一个配置源,静态工厂方法将使用系统配置源。这意味着配置信息必须保存在应用程序的配置文件中(App.config 或者 Web.config )。

配置控制台为配置源保存信息到应用程序配置文件中。以下的 XML 显示了在应用程序配置文件中的一个配置节,它定义了二个配置源。
<enterpriseLibrary.ConfigurationSource selectedSource="systemSource">   <sources>     <add name="fileSource" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common" filePath="test.exe.config"/>     <add name="systemSource" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.SystemConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common"/>   </sources></enterpriseLibrary.ConfigurationSource>

使用注意事项

这里有一些关于配置源的附加要点:
  • 静态工厂方法使用应用程序配置文件来决定默认配置源,这意味着在使用静态工厂方法时必须有一个应用程序配置文件。
  • 如果应用程序配置文件不包含节,Enterprise Library 将使用系统配置源。这意味着应用程序块配置必须保存到应用程序配置文件中。
  • 所有静态工厂方法都使用默认配置源,这意味着用于用静态工厂方法构建的所有应用程序块对象的配置信息都保存在同一位置。

使用提供程序工厂方法

一个静态工厂方法创建合适的配置源对象,然后构建一个提供程序工厂对象。也可以在应用程序代码中使用提供程序工厂对象。

使用提供程序工厂创建提供程序
  1. 创建配置源对象。
  2. 使用提供程序工厂对象来创建提供程序。

下列章节详细描述了这些步骤。

创建配置源

可以使用 ConfigurationSourceFactory 类来创建配置源对象。Create 方法接受一个标识配置源名称的字符串参数,此配置源必须定义在应用程序配置文件中(如果配置源没有定义,将触发一个异常)。这意味着使用 ConfigurationSourceFactory 就必须有一个应用程序配置文件。下列代码说明了如何使用 ConfigurationSourceFactory 创建一个配置源。

C#
IConfigurationSource source = ConfigurationSourceFactory.Create("fileSource");

Visual Basic .NET
Dim fileSource As IConfigurationSource = ConfigurationSourceFactory.Create("fileSource")

也可以直接创建一个配置源对象。配置源构造函数接受配置源需要的信息。下列代码说明了如何直接创建配置源。

C#
FileConfigurationSource fileSource = new FileConfigurationSource(@"ProductApplication.config");SystemConfigurationSource systemSource = new SystemConfigurationSource();

Visual Basic .NET
Dim fileSource As FileConfigurationSource = New FileConfigurationSource("ProductApplication.config")Dim systemSource As SystemConfigurationSource = New SystemConfigurationSource()

注意:Enterprise Library 包含了SqlConfigurationSource 配置源提供程序的示例,这个提供程序使用数据访问应用程序块从 SQL 数据库中读取配置设置。由此提供程序使用的节必须派生自 SerializableConfigurationSection 类。

配置修改通知

所有配置源类都实现了IConfigurationSource 接口,此接口允许应用程序代码订阅配置改变通知。在 Enterprise Library 中,只有日志应用程序块注册接收配置改变的通知。

创建提供程序工厂

提供程序工厂的构造函数接受一个配置源对象。提供程序工厂对象使用此配置源为提供程序对象读取配置信息。

C#
SystemConfigurationSource systemSource = new SystemConfigurationSource();DatabaseProviderFactory factory = new DatabaseProviderFactory(systemSource);

Visual Basic .NET
Dim systemSource As SystemConfigurationSource = New SystemConfigurationSource()Dim factory As DatabaseProviderFactory = New DatabaseProviderFactory(systemSource)

使用提供程序工厂创建提供程序

可以使用一个提供程序工厂构造多个提供程序实现。也可以用多个提供程序工厂对象从多个配置源中创建应用程序块对象。

下列代码展示了如何使用不同的配置源对象创建二个 DatabaseProviderFactory 对象,DatabaseProviderFactory 对象 factory1 从文件 ProductApplication.config 中读取配置信息,DatabaseProviderFactory 对象 factory2 从应用程序文件中读取配置信息。

C#
FileConfigurationSource fileSource = new FileConfigurationSource(@"ProductApplication.config");DatabaseProviderFactory factory1 = new DatabaseProviderFactory(fileSource);Database db1 = factory1.CreateDefault();SystemConfigurationSource systemSource = new SystemConfigurationSource();DatabaseProviderFactory factory2 = new DatabaseProviderFactory(systemSource);Database db2 = factory2.Create("Northwind");

Visual Basic .NET
Dim fileSource As FileConfigurationSource = New FileConfigurationSource("ProductApplication.config")Dim factory1 As DatabaseProviderFactory = New DatabaseProviderFactory(fileSource)Dim db1 As Database = factory1.CreateDefault()Dim systemSource As SystemConfigurationSource = New SystemConfigurationSource()Dim factory2 As DatabaseProviderFactory = New DatabaseProviderFactory(systemSource)Dim db2 As Database = factory2.Create("Northwind")

用法提示

这儿有一些关于提供程序工厂的要点:
  • 一个提供程序工厂绑定到单一的配置源。提供程序工厂对象的配置源在构造后不能被改变,这意味着每个提供程序对象的配置设置由实例读自一样的配置源。
  • 下列应用程序块提供程序工厂总是返回同样的命名提供程序实例:
    • CacheManagerFactory
    • SecurityCacheProviderFactory
    • ExceptionPolicyFactory

直接构造应用程序块对象

有时应用程序场景的配置信息不存在于一个配置源中。例如,系统从用户输入的数据中动态的创建配置信息。在这些情况下,可以直接构造应用程序块对象,传递必要的配置信息到构造函数。

工厂方法返回通用的提供程序接口。当构造一个应用程序块对象时,必须使用合适的构造函数参数,构造特定的提供程序实现类型,并传递必要的参数到构造函数中。参数本身可以由一个工厂创建,也可以从构造函数创建。下列代码展示了如何构造一个数据访问应用程序块的 SqlDatabase 对象。

C#
SqlDatabase db = new SqlDatabase(@"server=(local)/SQLEXPRESS;database=EntLibQuickStarts;Integrated Security=true");

Visual Basic .NET
Dim db As SqlDatabase = New SqlDatabase("server=(local)/SQLEXPRESS;database=EntLibQuickStarts;Integrated Security=true")

注意:Enterprise Library 包含使度量可用的代码。如果直接创建应用和程序块对象,度量将对那些对象不起作用。然而,在大多数情况下,可以绑定合适的度量监听器到应用程序提供程序。关于度量和提供程序的更多信息,请参阅度量。

顶部



编辑

配置应用程序块

用于 Enterprise Library 应用程序块的配置信息被保存为 XML 格式,通常,信息存在于一个 XML 文件中。XML 文件包含的信息是应用程序的配置文件。

可以手工修改 XML 数据,但 Enterprise Library 提供了二个配置工具,极大的简化了这个任务。这些工作是独立的配置控制台和集成到 Visual Studio 中的配置编辑器。如果选择手工编辑 XML ,参考相应应用程序块的文档以得到更详细的信息。

下列示例使用配置控制台为例说明如何配置应用程序块,此过程同样适用于配置编辑器,二者之间的唯一不同是如何在每个工具中打开配置文件。关于此主题的更多详细信息,请参见使用配置编辑器。

使用配置工具

Enterprise Library 配置工具是个图形化的工具,允许创建、修改和验证应用程序块设置,而不需要手工修改它们保存的 XML 配置文件。这儿有二个工具供选择:配置编辑器,它与 Visual Studio 2005 集成;配置控制台,这是个独立的工具。这些工具显示了可用的配置设置,可以修改默认值以及每个设置意味着的信息。

使用配置编辑器
  1. 在 Visual Studio 2005 中打开一个解决方案。
  2. 在解决方案浏览器中,右单击配置文件,然后选择 Edit Enterprise Library Configuration
  3. 右单击应用程序配置节点,指向新建,然后从列表中单击一个应用程序块 。例如,单击 Logging Application Block
  4. 显示出了应用程序的选项,以及它们的默认值。右单击并修改要改变的配置选项。例如,如果配置日志应用程序块,并且要添加一个文本文件(flat file )跟踪监听器,可以按下面这样做:
    1. 右单击 Trace Listeners,指向 New,然后单击 FlatFile TraceListener
    2. 在属性面板中 FileName 属性的后面,单击省略号按钮(...),然后输入文件名以及跟踪监听文件的位置。
  5. 在修改完所有配置后,单击 File 菜单中的 Save

在 Visual Studio 中,XML 编辑器是 .config 文件的默认编辑器,当在解决方案浏览器中双击一个 .config 文件时,XML 编辑器将打开。下列过程描述了如何改变默认编辑器。

设置配置编辑器为默认编辑器
  1. 在 Visual Studio 中打开一个文件。
  2. 在解决方案浏览器中,右单击配置(.config)文件。
  3. 单击 Open
  4. 单击 Enterprise Library Configuration Editor
  5. 单击 Set as Default 按钮。
  6. 单击 OK

使用配置控制台
  1. 在任务栏中,单击 开始,指向程序,指向 Microsoft patterns & practices,指向 Enterprise Library 3.1 – May 2007,然后单击Enterprise Library Configuration。这样加载的是使用强命名程序集副本的配置控制台。如果要使用不同的程序集集合,使用 Windows 浏览器导航到合适的 EntLibConfig.exe 副本。
  2. File 菜单中,单击 New Application (如果配置一个新的应用程序),或者 Open Application (如果配置已存在的应用程序)。注意:如果打开一个已存在的应用程序配置文件,如果Machine.config包含任何连接字符串,配置控制台将显示数据访问应用程序块。更多信息,请参见用法提示。
  3. 右单击 应用程序配置节点,指向 New,从列表中单击一个应用程序块。例如,单击 Logging Application Block
  4. 显示出了应用程序的选项,以及它们的默认值。右单击并修改要改变的配置选项。例如,如果配置日志应用程序块,并且要添加一个文本文件(flat file )跟踪监听器,可以按下面这样做:
    1. 右单击 Trace Listeners,指向 New,然后单击 FlatFile TraceListener
    2. 在属性面板中 FileName 属性的后面,单击省略号按钮(...),然后输入文件名以及跟踪监听文件的位置。
  5. 在修改完所有配置后,单击 File 菜单中的 Save Application

每个应用程序的文档都包含配置它的过程。

用法提示

一些关于配置控制台的用法提示:
  • 控制台不支持编辑和保存在 Machine.config 文件中的 Enterprise Library 配置节。在 Machine.config 文件中的 Enterprise Library 配置节信息可以在运行时访问,但不能在设计时修改,因此无法保存 Enterprise Library 配置信息到 Machine.config 文件中去。
  • 配置控制台显示了保存在 Machine.config 文件中的连接字符串,但它只保存连接字符串应用程序配置文件中。如果用配置控制台来修改保存在 Machine.config 文件中的连接字符串,修改将被忽略。
  • 在运行时,数据访问应用程序块可以使用保存在 Machine.config 文件中的连接字符串。
  • 配置控制台在数据访问应用程序块配置信息下显示连接字符串信息。这意味着在 Machine.config 文件中定义了连接字符串的话,你将在打开任何应用程序配置文件时看到数据访问应用程序块节点,而不管你是否添加了那个应用程序块到应用程序配置文件中。
  • 如果应用程序配置包含自定义的提供程序的话,必须创建对配置控制台来说可用的自定义提供程序程序集。要做到这一点,可以复制程序集到配置控制台可执行文件的目录中,或者安装它到全局程序集缓存。也可以使用 DEVPATH 环境变量让配置控制台能定位到自定义提供程序集。
  • <appSettings> 节必须保存在单一的文件中,而不能分开放到多个文件中。文件的示例是,不能修改保存在 Machine.config 文件中的 <appSettings>节,<appSettings>节可选的文件属性,属性指定了到外部文件的相关路径。

使用可选择的配置源

可以使用其他的源,例如 SQL 数据库,来得到配置信息。应用程序配置文件包含配置源的配置节,如果没有这一节,应用程序配置文件将被做为配置源。然而,如果使用可选的配置源, Enterprise Library 将保存配置信息为 XML 。核心配置类支持读取配置信息首先从配置源位置读取需要的配置节。如果配置节没有找到,核心类尝试从系统配置源中读取配置节。

使用可选的配置源
  1. 启动 Enterprise Library 配置控制台。要使用配置控制台,单击开始,指向程序,指向 Microsoftpatterns & practices ,指向 Enterprise Library 3.1 – May 2007,然后单击 Enterprise Library Configuration
  2. File 菜单中,单击 New Application (如果配置一个新的应用程序)或者 Open Application (如果配置一个已存在的应用程序)。
  3. 右单击 应用程序配置节点,指向 New,然后单击 Configuration Sources
  4. 右单击 配置源,指向 New,然后单击要使用的配置源类型(如 File Configuration Source)。
  5. 使用属性面板为新的配置源输入想要的配置属性。
  6. 选择配置源节点,然后选择属性面板中的 SelectedSource 属性。
  7. 单击 System Configuration Source 后面的箭头,单击要使用配置源。
  8. 修改配置后,单击 File,然后单击 Save Application

顶部



编辑

输入配置源信息

这些过程解释了如何配置配置源,与节点相关的属性显示在右边的面板中。应用程序为关于应用程序块是如何配置的信息使用配置源。默认情况下,应用程序使用 SystemConfigurationSource 类的一个实例,这意味着应用程序从应用程序配置文件中获取配置信息。可以使用 Enterprise Library 配置控制台引导应用程序使用一个配置文件,而不是默认配置,或者使用一个不同的配置源。 使用应用程序配置文件

默认情况下,Enterprise Library 配置工具放置在应用程序的配置文件中(这也是应用程序定位的默认配置)。

使用应用程序配置文件
  1. 启动 Enterprise Library 配置控制台。要使用配置控制台,单击开始,指向程序,指向 Microsoftpatterns&practices,指向 Enterprise Library 3.1 – May 2007,然后单击 Enterprise Library Configuration
  2. 单击 New Application ,或者 Open Existing Application
  3. 右单击 Application Configuration,指向 New,然后单击 Configuration Sources
  4. 控制台添加了默认的 SystemConfigurationSource 节点,如何要修改此属性,单击此节点。
  5. (可选的)为 System Configuration Source 节点输入新名称,默认的名称是 SystemConfigurationSource

使用其他配置源

可以使用不同于应用程序配置文件的配置源。下列过程展示了如何做:

使用其他配置源
  1. 如果要使用一个不同于系统配置源的配置源,右单击 ConfigurationSources,指向 New,然后单击 FileConfigurationSource
  2. 设置 File 属性,输入文件名或者单击省略号按钮(...),然后单击要使用的文件。
  3. (可选的)设置 Name 属性。为 FileConfigurationSource 输入新的名称,默认名称是 FileConfigurationSource

设置默认配置源

可以为应用程序选择默认的配置源。下列过程描述了如何做:

设置默认配置源
  1. 单击 Configuration Sources 节点。
  2. 修改 SelectedSource 。输入另一个配置源的名称,或者从下拉列表中单击一个。

顶部



编辑

Enterprise Library 内核的源模式

Enterprise Library 内核提供服务,例如度量和配置,以及所有 Enterprise Library 应用程序块所依赖的内核。内核功能包含在程序集 Microsoft.Practices.EnterpriseLibrary.Common.dll 中。

有二个配置节与 Enterprise Library 内核关联。他们是 instrumentationConfigurationenterpriseLibrary.ConfigurationSource 节。这些节定义了哪种度量节在应用程序中可用,以及哪个数据源将被用于访问应用程序中的配置信息。下列 XML 代码展示了配置节定义,它定义了那些配置节的位置。这些定义将被定义在应用程序配置文件的 <configSections> 节中。

XML
<configSections>    <section name="instrumentationConfiguration"        type="Microsoft.Practices.EnterpriseLibrary.Common.Instrumentation.Configuration.InstrumentationConfigurationSection,        Microsoft.Practices.EnterpriseLibrary.Common, Version=3.1.0.0, Culture=neutral, PublicKeyToken=null" />    <section name="enterpriseLibrary.ConfigurationSource"         type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ConfigurationSourceSection,        Microsoft.Practices.EnterpriseLibrary.Common, Version=3.1.0.0, Culture=neutral, PublicKeyToken=null" /></configSections>

如果在配置文件中没有 enterpriseLibrary.ConfigurationSource 节,一个 SystemConfigurationSource 类的实例将成为应用程序的配置源。这意味着当应用程序使用静态工厂时,它从应用程序的配置文件中获取配置信息。

enterpriseLibrary.ConfigurationSource 元素

enterpriseLibrary.ConfigurationSource 元素指定了应用程序将使用的配置源。这个元素不是必须的,如果省略,应用程序将使用 SystemConfigurationSource 类的实例。

下列章节描述了 enterpriseLibrary.ConfigurationSource 元素的属性和子元素。

属性

表1列出了enterpriseLibrary.ConfigurationSource 元素的属性
表 1 enterpriseLibrary.ConfigurationSource 属性
属性描述
selectedSource用于此应用程序的配置源,它必须是列出在 <sources> 节中的名称。此属性是必须的。

sources 元素

sources 元素是 enterpriseLibrary.ConfigurationSource 元素的子元素,它列出了应用程序可以使用的配置源。此元素是必须的。

add 元素

add 元素是 sources 元素的子元素。它添加配置源的名称。此元素不是必须的,可以有多个 add 元素。表 2 列出了 add 元素的属性。
表2 add 元素的属性
属性描述
name配置源的名称。在节中,名称必须是唯一的。此属性是必须的。
type实现 IConfigurationSource 接口的类的类型名称。
filePath指向配置文件路径。如果配置源是一个文件的话,此属性是必须的。
connectionstring用于保存配置信息的 SQL Server 数据库的 SQL Server 连接字符串。
getStoredProcedure拥有配置信息的数据库中的一个存储过程的名称。这是当应用程序获取配置节时要调用的存储过程。如果应用程序使用一个 SQL Server 数据库的存储过程来获取配置信息的话,此属性才是必须的。
setStoredProcedure拥有配置信息的数据库中的一个存储过程的名称。这是当应用程序设置配置节时要调用的存储过程。如果应用程序使用一个 SQL Server 数据库的存储过程来设置配置信息的话,此属性才是必须的。
refreshStoredProcedure拥有配置信息的数据库中的一个存储过程的名称。这是当应用程序刷新配置节时要调用的存储过程。如果应用程序使用一个 SQL Server 数据库的存储过程来刷新配置信息的话,此属性才是必须的。
removeStoredProcedure拥有配置信息的数据库中的一个存储过程的名称。这是当应用程序移除配置节时要调用的存储过程。如果应用程序使用一个 SQL Server 数据库的存储过程来移除配置信息的话,此属性才是必须的。

instrumentationConfiguration 子元素

instrumentationConfiguration 元素使不同的度量类型可用或不可用。此元素不是必须的。如果此元素不包含在配置源中,则所有度量是不可用的。表 3 列出了 instrumentationConfiguration 元素的属性。

表 3: instrumentationConfiguration 属性
属性描述
performanceCountersEnabled指定被应用程序使用的应用程序块是否将被写到性能计数器中。可能值是 truefalse ,默认值是 false 。此属性不是必须的。
eventLoggingEnabled指定被应用程序使用的应用程序块是否将被写到事件日志中。可能值是 truefalse,默认值是 false。此属性不是必须的。
wmiEnabled指定被应用程序使用的应用程序块是否将被写到Windows 管理度量(WMI)中。可能值是 truefalse,默认值是 false。此属性不是必须的。

顶部



编辑

度量可用

术语“度量”指的是,系统的监视或测量性能以及诊断错误的能力。对于度量的一般信息,请参见在.NET 发布应用程序中的监视设计。

Enterprise Library 在所有的应用程序块中加入了下列的度量:
  • Event logs。应用程序块通知用户关键事件,如错误和警告。
  • Performance counters。应用程序块记录键维度,例如每秒产生的严重事件数,或者进行关键任务的平均次数,被写到 Microsoft Windows 操作系统的性能记数器中。
  • Windows Management Instrumentation (WMI)。应用程序块用发布 WMI 事件来报告应用程序块中的重大事件。

关闭与开启度量

默认情况下,度量是不可用的。要使度量可用,必须安装度量模式和配置应用程序。

安装和卸载度量模式

要安装度量模式,可以运行 InstallServices.bat 批处理文件,或者使用开始菜单中的 Install Instrumentation 快捷方式。要使用快捷方式,单击开始,指向程序Microsoft patterns & practicesEnterprise Library 3.1 – May 2007,然后单击 Install Instrumentation

要卸载度量,可以带 /u 参数运行 InstallServices.bat 批处理文件,也可以使用 开始 菜单中的 Uninstall Instrumentation 快捷方式。要使用快捷方式,单击开始,指向程序Microsoft patterns & practicesEnterprise Library 3.1 – May 2007,然后单击 Uninstall Instrumentation

注意开始菜单链接总是运行强命名的二进制。要安装从源码编译的程序集副本的度量,运行 [Src install root]/App Blocks/InstallServices.bat 。

为度量配置应用程序

度量由应用程序配置文件的 <instrumentationConfiguration> 节所控制,此节决定了度量对整个应用程序有什么样的行为。

默认情况下,所有度量都是不可用的。可以使用配置来使度量可用,或者如果以前可用的使它不可用。所有的度量属性都出现在右面板中,当属性设置为 true 时,度量可用。当属性设置不 false 时,度量不可用。

配置度量
  1. 启动配置控制台。要启动配置控制台,单击开始,指向程序Microsoft patterns & practicesEnterprise Library 3.1 – May 2007,然后单击 Enterprise Library Configuration
  2. 单击 New ApplicationOpen Existing Application
  3. 右单击 Application Configuration,指向 New,然后单击 Instrumentation
  4. 设置 EventLoggingEnabled 属性,输入 truefalse 或者从选择的下拉列表中选择一个,默认值是 false
  5. 设置 PerformanceCountersEnabled 属性。输入 truefalse 或者从选择的下拉列表中选择一个,默认值是 false
  6. 设置 WmiEnabled 属性。输入 truefalse 或者从选择的下拉列表中选择一个,默认值是 false