版权所有(c) 2007 Dorian Deng。署名 共享 非商用。
转载请注明出处:http://blog.csdn.net/doriandeng/archive/2007/09/20/1793768.aspx
Enterprise Library 包含了应用程序块的源码,可以在应用程序中包含源码或者编译应用程序块并使用编译后的程序集。对于如何编译应用程序块的介绍,请参阅编译应用程序块。在应用程序中使用 Enterprise Library 程序集之前,必须添加到相应应用程序块程序集和Common程序集的引用。要编写应用程序代码,必须注意 Enterprise Library 命名空间的协定和对象创建模式。
引用 Enterprise Library 程序集
在构建混有 Enterprise Library 应用程序块的应用程序之前,必须添加对应用程序块、Common和ObjectBuilder程序集的引用。这是为应用程序使用 Enterprise Library 做准备。小心的选择程序集,是决定使用 Microsoft 强命名程序集、非强命名程序集还是一个定制的 Enterprise Library 程序集集合。
为应用程序做准备
-
添加对应用程序块程序集的引用。在 Visual Studio 中,右单击解决方案浏览器中的项目节点,然后单击浏览标签,然后找到应用程序块程序集的位置(脚本
,单击CopyAssemblies.bat
可以复制所有应用程序块到bin子目录中),选择程序集,然后单击 添加引用。例如,要引用缓存应用程序块程序集,浏览到bin子目录,选择程序集Microsoft.Practices.EnterpriseLibrary.Caching.dll
,然后单击 。 -
使用同样的过程添加对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 )。
例 2.1. C#
using Microsoft.Practices.EnterpriseLibrary.Caching; using Microsoft.Practices.EnterpriseLibrary.Caching.Expirations;
例 2.2. Visual Basic .NET
Imports Microsoft.Practices.EnterpriseLibrary.Caching Imports Microsoft.Practices.EnterpriseLibrary.Caching.Expirations
注意
对于 Visual Basic 项目,项目设计器的引用页来管理引用和导入的命名空间。要访问引用页,在解决方案浏览器中选择项目节点,然后在引用标签。
菜单上单击 ,当项目设计器出现时,选择创建应用程序块对象
Enterprise Library 内核提供了创建对象的支持,创建对象要求有配置信息。图1说明了这些对象是如何用 Enterprise Library 内核构建的。
使用静态工厂方法
Enterprise Library 应用程序块包含静态工厂方法,可以用来创建应用程序块对象。这些静态方法实现了工厂模式以实例化提供程序。这意味着如果应用程序使用了这些静态工厂方法的话,它们在创建时就不需要任何关于提供程序的特定实现的信息。下列代码显示了应用程序使用数据访问应用程序块的DatabaseFactory
类来创建一个Database
对象。
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>
使用注意事项
这里有一些关于配置源的附加要点:
-
静态工厂方法使用应用程序配置文件来决定默认配置源,这意味着在使用静态工厂方法时必须有一个应用程序配置文件。
-
如果应用程序配置文件不包含<enterpriseLibrary.ConfigurationSource>节,Enterprise Library 将使用系统配置源。这意味着应用程序块配置必须保存到应用程序配置文件中。
-
所有静态工厂方法都使用默认配置源,这意味着用于用静态工厂方法构建的所有应用程序块对象的配置信息都保存在同一位置。
使用提供程序工厂方法
一个静态工厂方法创建合适的配置源对象,然后构建一个提供程序工厂对象。也可以在应用程序代码中使用提供程序工厂对象。
使用提供程序工厂创建提供程序
-
创建配置源对象。
-
创建提供程序工厂对象,传递配置源对象。
-
使用提供程序工厂对象来创建提供程序。
下列章节详细描述了这些步骤。
创建配置源
可以使用ConfigurationSourceFactory
类来创建配置源对象。Create
方法接受一个标识配置源名称的字符串参数,此配置源必须定义在应用程序配置文件中(如果配置源没有定义,将触发一个异常)。这意味着使用ConfigurationSourceFactory
就必须有一个应用程序配置文件。下列代码说明了如何使用ConfigurationSourceFactory
创建一个配置源。
例 2.6. Visual Basic .NET
Dim fileSource As IConfigurationSource = ConfigurationSourceFactory.Create("fileSource")
也可以直接创建一个配置源对象。配置源构造函数接受配置源需要的信息。下列代码说明了如何直接创建配置源。
例 2.7. C#
FileConfigurationSource fileSource = new FileConfigurationSource(@"ProductApplication.config"); SystemConfigurationSource systemSource = new SystemConfigurationSource();
例 2.8. 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 中,只有日志应用程序块注册接收配置改变的通知。
创建提供程序工厂
提供程序工厂的构造函数接受一个配置源对象。提供程序工厂对象使用此配置源为提供程序对象读取配置信息。
例 2.9. C#
SystemConfigurationSource systemSource = new SystemConfigurationSource(); DatabaseProviderFactory factory = new DatabaseProviderFactory(systemSource);
例 2.10. Visual Basic .NET
Dim systemSource As SystemConfigurationSource = New SystemConfigurationSource() Dim factory As DatabaseProviderFactory = New DatabaseProviderFactory(systemSource)
使用提供程序工厂创建提供程序
可以使用一个提供程序工厂构造多个提供程序实现。也可以用多个提供程序工厂对象从多个配置源中创建应用程序块对象。
下列代码展示了如何使用不同的配置源对象创建二个DatabaseProviderFactory
对象,DatabaseProviderFactory
对象 factory1 从文件 ProductApplication.config
中读取配置信息,DatabaseProviderFactory
对象 factory2 从应用程序文件中读取配置信息。
例 2.11. 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");
例 2.12. 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
对象。
例 2.13. C#
SqlDatabase db = new SqlDatabase(@"server=(local)/SQLEXPRESS;database=EntLibQuickStarts;Integrated Security=true");
例 2.14. Visual Basic .NET
Dim db As SqlDatabase = New SqlDatabase("server=(local)/SQLEXPRESS;database=EntLibQuickStarts;Integrated Security=true")
注意
Enterprise Library 包含使度量可用的代码。如果直接创建应用和程序块对象,度量将对那些对象不起作用。然而,在大多数情况下,可以绑定合适的度量监听器到应用程序提供程序。关于度量和提供程序的更多信息,请参阅度量。