Unity2.0学习笔记-Unity概述

1.    Unity概述

1.1.   Unity是什么

Unity是由微软的Patterns & Practices团队开发的一个轻量级、可扩展的依赖注入(Dependency Injection, DI)容器,支持拦截、构造函数注入、属性注入和方法调用注入。所谓依赖注入,即将程序开发过程中的对象与其所依赖的具体对象解耦,从一定程度上仅关注所依赖的对象,却不管其具体对象是哪个类的实例;而真正的被依赖对象在运行时由容器注入。所以本质上,它就是一个对象工厂和对象管理器。

Unity能够在任何基于.NET Framework的应用程序中使用。它提供了依赖注入机制中的所有常用特性,包括注册类型映射和对象实例以及在构造函数或方法中进行参数注入。同时,Unity也是一个可以灵活扩展的容器,你可以通过添加各种扩展来改变容器的行为或者添加新的特性,如Unity中的拦截特性就是通过扩展来实现的。使用Unity能够使整个开发过程更加的灵活、可变,从而适应多变的用户需求(当然也要按照项目的实际情况来使用,否则会带来不必要的性能损失)。

1.2.   使用场景

Unity解决了在开发基于组件的软件工程时所面临的问题。现代商业应用程序由执行程序内特定或一般任务的自定义业务对象和组件,以及一组独立解决注入日志记录、授权验证、缓存、异常处理等横切关注点的组件组成。

成功建立这些类型的应用程序的关键是要实现完全解耦或者非常松散的耦合设计。松散耦合的应用更灵活,更易于维护也更容易测试。你可以模拟具有强烈依赖性的对象,如数据库连接,网络连接以及丰富的用户界面组件。

依赖注入是建立松散的耦合应用中的首要技术。它提供方法来处理对象之间的依赖关系。例如,一个用于处理客户资料的对象可能依赖于其他对象来访问数据存储、验证信息,并检查该用户被授权执行更新。通过依赖注入技术,可确保客户正确实例化和填充类所有这些对象,尤其是在依赖可能是抽象的。

下面的几种设计模式代表了Unity的几种使用场景:

控制反转(IoC)模式IoC是一种用来解决组件之间依赖关系、配置及生命周期的设计模式,其中对组件依赖关系的处理是IoC的精华部分。IoC的实际意义就是把组件之间的依赖关系提取(反转)出来,由容器来具体配置。

依赖注入(DI)模式IoC模式可以延缓接口的实现,根据需要实现,有个比喻:接口如同空的模型套,在必要时,需要向模型套注射石膏,这样才能成为一个模型实体,因此,对于这些新生的容器,它们反转的是“如何定位插件的具体实现”。因此, Martin Fowler 给这种模式起了一个形象的名称“依赖注入”(Dependency Injection)。依赖注入的形式主要有三种,分别将它们叫做构造子注入(Constructor Injection)、设值方法注入(Setter Injection)和接口注入(Interface Injection)。

拦截模式:这种模式引入了另一种间接的层次。这种技术在客户端和真实对象之间放置了一个代理对象。客户端的行为和与真实对象直接交互时一样,但代理可以按照需要拦截并管理其它对象对真实对象的方法调用。

1.3.   优点和限制

1.3.1.   优点

它提供了简化的对象创建机制,特别是对分层的对象结构和依赖关系,从而简化了应用程序代码。它包含一个创建依赖于其它对象的对象实例的机制;

它支持需求的抽象,这使开发人员能够在运行时或在配置中指定依赖,简化横切关注点的管理;

它允许客户端存储或缓存容器。这在ASP.NET Web应用程序尤其有用,开发人员能够在ASP.NET会话或应用程序中持久化容器;

它有一个拦截能力,允许开发人员创建一个处理器对方法或属性的调用前或返回后进行拦截,从而实现对已有组件功能的扩展;

它可以从标准的配置系统中读取配置信息,如XML文件,并利用它来配置容器;

它对类的定义没有任何要求,没有要求加上特殊的Attribute(除非使用属性或方法调用注入),关于类的声明也没有任何限制;

它支持自定义容器扩展;例如,可以实现额外的对象构造方法如缓存;

它可以让架构师和开发者更容易地实现在现代应用中经常使用的设计模式。

1.3.2.   限制

使用Unity进行依赖注入对性能有轻微的影响,而且当系统只有简单的对象关系时,会增加系统的复杂性。所以在下列情况下你不应该使用Unity

当你的对象或类,并不依赖与其它的对象或类;

当你的依赖关系很简单,并不需要抽象。

1.4.   相关资源

Unity 2.0 For WPF 下载地址:http://www.microsoft.com/downloads/details.aspx?FamilyId=2d24f179-e0a6-49d7-89c4-5b67d939f91b&displaylang=en

Unity 2.0 For Silverlight下载地址:http://www.microsoft.com/downloads/details.aspx?FamilyId=03020964-57f3-4893-9e6c-3b1c281432c8&displaylang=en

Unity官网:http://unity.codeplex.com/ 源码和论坛都在这里;

Unity 用户手册下载:http://unity.codeplex.com/releases/view/31277

Unity MSDN帮助首页:http://msdn.microsoft.com/en-us/library/dd203101.aspx

posted on 2011-04-05 16:39  yingql  阅读(1591)  评论(2编辑  收藏  举报

导航