在4.1中你可以使用Unity Application Block(Unity)在函数或者是功能运行之前或者之后拦截企业库的对象,生成这些对象,并且将他们注入到其他对象中。
企业库中包含了很多的类,允许你从Unity容器中获取在企业库配置中定义的,类似SqlDatabase或者是CacheManager对象的实例。另外,一些有好的注入代替了过去的静态方法。使用Unity的依赖注入能力可以很好的简化你的代码。
使用4.1的系统需要
windows xp,2003,2008,vista
.NET FRAMEWORK 3.5或者更高
VS208
一、框架的依赖关系
准确的说就是程序集的依赖性,也就是要实现什么样的功能,都需要那些程序集引用。
1、所有功能都依赖的程序集
1.1 Microsoft.Practices.EnterpriseLibrary.Common.dl,里面包含了企业库的核心服务,被企业库的其他模块共享使用(除了Unity没有使用,你可以单独使用Unity Application Block实现依赖注入功能)。
1.2 Microsoft.Practices.ObjectBuilder2.dll,对象创建子系统,它执行了全部有关创建和回收对象的重复且必要的工作任务,同时提供了高级别的灵活性。
2、缓存模块额外依赖的程序集
2.1 如果使用数据库作为后段数据存储,你需要Data Access模块
2.2 如果你想加密缓存中的数据,你需要Cryptoraphy模块
3、异常处理额外需要的程序集
3。1 如果你想很实用日志模块记录异常信息,需要引用Microsoft.Practices.EnterpriseLibrary.Logging.dll和Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.dll。
3.2 还可能需要其他的程序集,例如Data Access模块,因为你可能想要记录异常信息。
4、策略注入Policy Injection额外需要的程序集
4.1 Policy Injection 提供了标准的处理过程,如果你的代码不使用内置的处理,你可以不部署policy injection依赖的程序集。
4.2 如果要使用policy injection 内置的权限处理,需要添加Security模块
4.3 如果使用policy injection内置的异常处理,你需要添加异常处理模块
4.4 如果使用policy injection内置的日志处理,需要添加日志模块
4.5 如果使用policy injection内置的数据验证,需要添加验证模块
5、安全模块额外依赖的程序集
5.1 缓存模块,安全模块使用缓存模块将安全信息缓存起来,用的时候可以获取出来。你也可以使用自己的缓存Provider代替企业库中的缓存模块,在配置缓存模块的时候还可能需要数据访问模块,更多的信息可以查看缓存模块的依赖关系。
二、依赖注入模块的使用
Unity Applicaiton Block提供了一个轻量的、可扩展的依赖注入容器,支持构造函数、属性以及方法调用注入。你可以在自己的应用中使用Unity或者自定义的依赖注入方式,创建企业库的对象或者自定义的依赖于其他对象或者服务的业务对象或者是服务。
你也可以不这么做,还是按照企业库以前的方式创建对象。
如果你决定使用Unity,你就需要添加对这个程序集的依赖。而且,和其他模块一样,Unity依赖于ObjectBuilder。关于更多的信息和依赖关系,可以查看依赖关系图。
三、依赖关系图
有很多种方法可以创建企业库的对象实例,你可以使用下面的方法之一来达到目的;
- 使用每一个模块的工厂类和企业库的核心类库创建对象实例
- 使用Unity模块创建任何类型的对象实例
- 在不使用企业库核心类库的情况下,使用Unity或者是第三方的依赖注入方法创建对象实例
1、使用企业库的工厂方法
企业库4.1支持以前版本的对象创建方法。每一个功能模块,核心库,都可以用工厂方法创建对象实例。例如:你可以使用下面的代码创建一个配置好的CacheManager类的实例。
上面的代码在企业库的核心类库中很常见,它直接调用了ObjectBuilder的工具类。在下图中,你会发现,所有的功能都依赖于企业库的核心和ObjectBuilder。
使用这种方法创建对象,需要部署下列程序集:
- 核心库Microsoft.Practices.EnterpriseLibrary.Common.dll
- 对象创建程序集Microsoft.Practices.ObjectBuilder2.dll
2、使用Unity Application Block创建对象
Unity允许开发者用依赖注入的模式创建各种对象。如果需要的话,自动注入需要依赖的对象。可以使用这种方式创建企业库对象和自定义的业务对象。下图显示使用Unity改变应用程序和企业库核心的依赖关系。
在这种情况下,除去Unity,所有的模块都依赖于核心类库的配置系统。但是,尽管Unity使用了存储在应用程序目录下的app.config和web.config文件中的配置信息,但是Unity容器不会被自动创建和配置。相反,需要开发者创建容器并且加载配置信息。
创建并且配置了容器之后,开发者可以使用下面的语法创建对象。
使用这种技术创建对象,开发者需要部署下面的程序集:
- 核心类库Microsoft.Practices.EnterpriseLibrary.Common.dll
- Unity程序集Microsoft.Practices.Unity.dll
- 对象创建程序集Microsoft.Practices.ObjectBuiler2.dll
- 应用中使用的其他模块的程序集
3、使用第三方依赖注入技术
Unity被设计成一个可以既可以在企业库中使用,也可以单独使用的依赖注入技术。另外,如果需要,开发者可以用第三方的依赖注入框架代替Unity,下图显示了使用第三方依赖注入框架的时候各模块的依赖关系。
这个方法要求第三方的依赖注入框架支持在配置中描述对象、设置以及和各功能模块的必要关系。Unity中包含了在企业库中使用依赖注入技术的标准配置的范本。
使用这种技术创建对象,开发者需要部署的程序集如下:
- 用到的各功能模块的程序集。
- 企业库的Common程序集,里面包含了共享的核心功能
- 如果使用Unity作为依赖注入技术,开发者必须要部署Microsoft.Practices.Unity.dll和Microsoft.Practices.ObjectBuilder2.dll
- 如果使用第三方的依赖注入技术,开发者需要部署相关程序集,并且配置他们。
有的时候,如果没有加入所需的程序集,会在编译的时候有提示,提示需要加入的程序集。