[EntLib]微软企业库5.0 学习之路

nd | | 访问(392)

  一、什么是企业库?

  企业库包含一系列应用程序模块和核心架构。这些高复用的组件旨在帮助开发者解决一些共同的企业开发问题。

  企业库同时提供高可配置的特性,使我们管理重复的工作更加容易,例如我们知道的在应用的很多地方发生的横切关注点。包括像日志记录、缓存、异常管理等。另外,它提供的依赖注入容器能够简化和分解你的设计,使他们更加可实验和容易理解,帮助你创建更加高性能的设计和各种应用。

  二、使用企业库的3个简单步骤:

  1.引用和配置你需要的程序集。

  2.通过企业库配置应用。

  3.在你的代码中创建和使用企业库对象。

  三、企业库的好处: 应用模块帮助解决开发者从一个项目到另一个项目面对的共同问题。他们的设计封装了微软推荐的做法,这些都是基于微软框架的应用开发。例如,数据访问应用模块提供了对ADO.NET访问最频繁使用的特征。在某些情况下,应用模块还添加了一些基础类库没有直接提供的相关功能。

  四、企业库的目标

  1.一致。所有的企业库模块都坚持一致的设计模式和实现方式。

  2.可扩展性。所有的应用模块包括定义扩展点,允许开发人员通过添加自己的代码定制应用模块的行为。

  3.易用性。企业库提供了许多实用性的东西,包括一个图形化配置工具,简单的安装过程,完成的文档和示例。

  4.集成。企业库应用模块被设计得能够一起很好的工作,并且也被这样测试过。但是你不必一起使用他们。我们可以单独使用这些应用模块,同时这些应用模块之间也有些依赖,比如在企业库核心和Unity中的一些通用组件。

  一、Unity和对象生成器的整合 
在这个版本中,用于创建对象的基本技术是一个单一的依赖注入容器,默认的是Unity。你可以使用容器生成企业库对象的实例并注入到其他的对象。 企业库提供一个标准的接口从Unity容器中来获得定义在企业库配置中的对象的实例,如SqlDatabase或LogWriter.另外,注入友好的实例门面处理静态门面之外是有效的,因为静态门面不能用注入,但是为了向后兼容以前的版本而存在。在本版本中的示例中都是用依赖注入,但是以前版本中是用的静态工厂类和静态门面在这个版本中还是支持的。对象生成器,一个低版本的依赖注入机制在这个版本中被归入Unity中,在项目中不再需要单独引用对象生成器集。

  支持Unity容器,必须引用一个被包含在企业库中的Microsoft.Practices.ServiceLocation程序集。如果要使用一个第3方的依赖注入容器,必须直接实现IServiceLocator接口或者通过适配器实现。

  二、影响所有模块的变化: 
1.在企业库中主要修正是使用依赖注入机制。所用的应用模块以及核心系统都是用依赖注入机制,并使用Unity作为默认的依赖注入容器,来创建和管理企业库对象。

  2.自主容器的实现通过实现Common Service Locator项目提供的 IServiceLocator 接口来完成。

  3.由于错误配置引发的错误将提供更多有用的错误信息。

  4.配置系统公开了一个 fluent接口,用来为单个对象或整个应用创建和填充配置源。fluent API使得为各种情景创建配置源更加容易。

  5.ConfigurationView类被删除.

  6.一些配置元素有默认值,可能不同于以前版本的隐式默认值.

  7.企业库现在允许你通过另一个配置文件合成一个混合配置文件.

  8.可以可通过不同的配置文件读取不同的配置信息.

  9.企业库不支持XAML浏览器应用程序(XBAP).

  10.WmiEnabled标志为了像前兼容仍然存在企业库中,但是在5.0中是被忽略的,而且将来会被删除.

  11.改进式的安装允许你只安装部分应用模块及配置工具.

  12.在以前版本中要做统一集成,必须添加核心企业库的扩展和每个模块的扩展。现在如果你只需要直接访问容器,那么只有核心扩展是必须的。单独模块将自动支持。

  旧的功能为了保持像前兼容仍然保留,但已经不起作用。

  13.FileConfigurationSource.Save 的签名已经改变,参数由3个变为2个。

  14.快速入门不再包含在主安装程序中。

  三、Breaking变化:

  1.企业库现在抛出了一个配置错误ActivationException,之前是System.Configuration.ConfigurationErrorsException。这包括试着解决没有配置信息错误的一个实例提供者。

  2.以前版本在获取应用模块错误时抛出BuildFailedException错误,现在对于所有的应用模块都抛出ActivationException

  3 .之前的版本,在讲一个空源传到容器来调用容器的时候,会抛出ArgumentNullException,现在抛出NullReferenceException

  4.ObjectBuilder2不再是一个单独的程序集,而是集成到了Unity集合中,在项目中也不需要引用ObjectBuilder2.dll。

  5.WMI支持已经从企业库中删除,除了在logging模块中的WMI跟踪监听器。

  6.如果你没有关闭DbDataReader,可能会导致随机的、很难在您的代码中找到的错误,尤其是当你正在一个由TransactionScope上下文创建的隐式事务下操作时。

  你必须始终确保您的应用程序及时关闭DbDataReader,无论是明确的DbDataReader.Close方法关闭或是逼迫DbDataReader释放。

  7.如果你使用 validator 特性必须引用 System.ComponentModel.DataAnnotations程序集。

  8.为FileConfigurationSource.Save方法签名已更改。该方法有两个参数,而不是3个参数

  9.Microsoft.Practices.EnterpriseLibrary.Configuration.Design.dll集合的功能和其他设计时集合被一个新的集合Microsoft.Practices.EnterpriseLibrary.Configuration.DesignTime.dll代替。

  10,性能计数器异常从PolicyInjection.CallHandlers移到 PolicyInjection 程序集。

  11.包含在Policy Injection Application Block中的CachingCallHandler有未处理的安全漏洞,已经从Policy Injection Application Block中移除。

  四、配置工具的改变: 
1.新的企业拥有一个新的GUI库和一个元数据驱动的可扩展性模。

  2.支持向导

  3.新的类型选择。

  4.不支持对依赖策略的Environmental Overrides 。日志模块处理Categories。

  五、缓存模块变化:

  1.缓存清除已被完全重写的性能优化

  六、数据库访问模块:

  1.ExecuteReader, ExecuteXmlReader, ExecuteScalar, and ExecuteNonQuery方法具有异步版本。

  2.包含了很多新的方法和类允许你提取数据作为对象序列。例如在合适的时候使用客户端查询技术,如LINQ.

  3.存在的方法ExecuteReader和新的方法BeginExecuteReader不接收CommandBehavior 参数。默认的当调用这些方法的时候这些方法

  会自动设置CommandBehavior 属性到reder中用来关闭连接直到指定一个事务。

  七、异常处理模块:

  1.日志异常处理重新使用日志模块的Log Writer and Trace Listeners 。这在之前版本中不是默认设置。

  2.增加一个功能,通过ExceptionManager.Process 方法接收一个默认值并返回一个值。