Fork me on GitHub
微软企业库5.0学习笔记(0)企业库主要内容

企业库包括很多东西,包括源代码、文档、单元测试等等,这里主要介绍与开发息息相关的内容。
一。企业库的应用模块:
1.缓存应用模块(The Caching Application Block)。可以为应用程序加上本地缓存。
2.加密应用模块(The Cryptography Application Block)。可以为应用程序添加散列和对称加密。
3.数据访问模块(The Data Access Application Block)。可用来添加保准的数据库访问功能。
4.异常处理模块(The Exception Handling Application Block)。可以为整个应用添加一致的异常处理。
5.日志记录模块(The Logging Application Block)。可以添加标准的日志记录功能,系统管理员还可以通过配置工具调整运行时日志记录的粒度。
6.注入策略模块(The Policy Injection Application Block)。储存一些向前兼容的代码。新的功能可以用统一拦截机制实现。
7.安全应用模块(The Security Application Block)。可以加入授权和安全缓存功能。
8.验证应用模块(The Validation Application Block)。为不同层的对象创建验证规则。
9.统一依赖注入和拦截(Unity Dependency Injection and Interception.)。可以用来实现轻量的可扩展的支持构造函数、属性、方法的依赖注入容器。
二。企业库还包括一系列核心功能,所有的应用模块都使用这些功能。
三。配置工具
四。依赖注入机制
   企业库增加了一个创建对象实例并管理其生命周期的易用机制。其主要特征
   。依赖注入(Dependency Injection)
   。控制反转(IOC)、
   。服务定位器(Service Locator)
   。服务器(Service Container )
   。工厂模式
   。创建者模式  

 企业库5.0是最新的企业库,最主要的变化之一是实例化和管理对象生命周期的全依赖注入的实现,它是企业库对象的创建在整个库中保持一致。能够使用不同的依赖注入容器。Unity是默认的依赖注入容器。这个版本还增加了应用模块数,另外这个版本能够使用vs2008和vs2010,以及.net框架4.0和包含sp1的3.5。
     主要变化:
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 方法接收一个默认值并返回一个值。

配置企业库管理
一。使用配置工具

1.单独使用配置工具。
开始->所有应用程序->Microsoft patterns & practices->Enterprise Library 5.0->Enterprise Library Configuration
选择相应的版本,弹出配置窗口。可以新建或打开编辑已有的配置文件。
在blocks中可以选择相应的模块配置,wizards可配置数据库异常日志记录,配置完成后保存即可。
2.在vs中,点击config文件,右键可用Enterprise Library V5 Configuration Editor编辑,也可选择打开方式将其设为默认打开方式。
高级配置说明(主要是通过添加基于文件的配置源):
1.使用非默认的配置存储。

 (1).配置窗口选择->blocks->Add Configuration Settings

 (2).如图

 

(3)

(4)


2.在多个应用程序共享配置节

(1).配置窗口选择->blocks->Add Configuration Settings

(2)

(3)

(4)


(5)

二。使用企业库的组策略

 (1).配置窗口选择->blocks->Add Configuration Settings

 (2)

(3)Selected Source选项中选择Manageable Configuration Source

(4)Application Name属性中输入值

(5)File Path 属性选择文件

(6)Group Policy Enabled 设为true.保存

三。配置部署环境

(1)

(2)如果要对文件加密,可在Protection provider属性中选择相应的值。

    Environment Name属性 是environment的名字

(3)为environment定制属性,添加应用模块到配置中。例如Add Logging Settings

(4) 在Overrides on [environment name]下拉菜单中, 点击Override Properties 设置模块的属性为可用

(5)点击Overrides on TestPlatform左边箭头编辑相应的属性

(6)

一。引用企业库程序集
1.引用企业库程序集
在Visual Studio中,在解决方案中右键你的项目,选择添加引用,找到相应的程序集。
分别完成对下列程序集的引用
Microsoft.Practices.EnterpriseLibrary.Logging.dll
Microsoft.Practices.EnterpriseLibrary.Common.dll
Microsoft.Practices.ServiceLocation.dll
Microsoft.Practices.Unity.dll
Microsoft.Practices.Unity.Interception.dll.

 

如果需要在你的代码中引用特定的统一配置类,需要引用Microsoft.Practices.Unity.Configuration.dll 。大多数情况下是不需要引用这个程序集的。

 

2.企业库命名空间
企业库所有的应用模块属于相同的命名空间。所有企业库的代码都在Microsoft.Practices.EnterpriseLibrary空间下。要使用相应的应用程序则需要引用相应的命名空间。
c#中使用using。vb.net 中使用Import.
例如使用日志记录应用模块

  1. C# Copy Code     
  2.  using Microsoft.Practices.EnterpriseLibrary.Logging;   
  3.  using Microsoft.Practices.EnterpriseLibrary.Logging.Database;   
  4.  using Microsoft.Practices.EnterpriseLibrary.Logging.Filters;   
  5. using Microsoft.Practices.EnterpriseLibrary.Logging.ExtraInformation;   
  6.     
  7. Visual Basic Copy Code     
  8. Imports Microsoft.Practices.EnterpriseLibrary.Logging   
  9. Imports Microsoft.Practices.EnterpriseLibrary.Logging.Database   
  10. Imports Microsoft.Practices.EnterpriseLibrary.Logging.Filters   
  11. Imports Microsoft.Practices.EnterpriseLibrary.Logging.ExtraInformation  
 
 
如果期望使用更先进的方法,以便充分使用Unity的依赖注入能力。

 

  1. C# Copy Code     
  2. using Microsoft.Practices.EnterpriseLibrary.Common.Configuration.Unity;   
  3. using Microsoft.Practices.Unity;   
  4.     
  5. Visual Basic Copy Code     
  6. Imports Microsoft.Practices.EnterpriseLibrary.Common.Configuration.Unity   
  7. Imports Microsoft.Practices.Unity  
  
 二。企业库中的依赖
 所有应用模块的依赖:
 1.统一依赖注入机制。统一执行所有重复和必须的对象创建和注销任务,并提供高灵活性。统一机制包含在程序集Microsoft.Practices.Unity.dll和Microsoft.Practices.Unity.Interception.dll
 2.依赖注入机制的服务本地化程序集。该程序集能够通过为依赖注入提供抽象层整合任何适合的依赖注入容器。包含在Microsoft.Practices.ServiceLocation.dll中。
 3.核心库功能。企业库提供诸如配置和仪器(instrumentation)的服务,它是企业库除了Unity的所有应用模块的共享依赖。包含在Microsoft.Practices.EnterpriseLibrary.Common.dll中。
注:可以将Unity作为单独的依赖注入容器。为了支持这一特性,Unity拥有自己的配置系统。所以,你可以使用Unity,而不需要部署位于企业库核心的配置系统。
 模块依赖图:

 


 缓存应用模块的附加依赖:
 1.如果使用一个数据库作为一个后备存储,则需要数据库访问应用模块
 2.如果你想在缓存中加密,则需要加密应用模块(Cryptography Application Block)
 异常处理应用模块的附加依赖:
 1.如果你用日志记录应用模块来记录异常,你需要 Microsoft.Practices.EnterpriseLibrary.Logging.dll 和 Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.dll。
 2.另外,异常处理应用模块还可能有对其他代码的依赖,包括日志记录应用模块和数据访问应用模块。如果进行日志记录处理就会需要日志 记录应用模块,如果配置日志记录应用模块使用数据库监听器,就会使用数据访问应用模块。
 依赖注入应用模块的附加依赖:
 1.如果进行授权处理,需要安全应用模块( Security Application Block)。
 2.如果进行异常处理,需要异常处理应用模块。
 3.如果进行日志记录出,需要日志记录应用模块。
 4.如果进行验证处理,需要验证应用模块。
安全应用模块的附加依赖:
1.缓存应用模块。安全应用模块使用缓存应用模块缓存安全信息并在需要的时候获得。当然你也可以使用自己的缓存提供器来代替缓存应用模块,这取决于你怎样来配置缓存引用模块,你也有可能使用数据访问模块。

 

http://blog.csdn.net/sfbirp/archive/2010/05.aspx

posted on 2010-06-08 15:49  HackerVirus  阅读(1254)  评论(0编辑  收藏  举报