- 浏览: 475543 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1028)
- [发布至博客园首页] (826)
- [随笔分类]个人生活随笔 (14)
- [网站分类]首页候选区 (26)
- [网站分类]SharePoint (15)
- [网站分类]其他技术区 (6)
- [随笔分类]批处理技巧 (6)
- [随笔分类].net 2.0 (3)
- [随笔分类]SharePoint2007(MOSS2007) (0)
- [网站分类].NET新手区 (6)
- [网站分类]ASP.NET (6)
- [网站分类]架构设计 (18)
- [网站分类]程序人生 (2)
- [网站分类]SQL Server (2)
- WCF (3)
- 编程技巧 (2)
- 模式架构 (2)
- 分析设计 (4)
- 生活随笔 (0)
- 软件工程 (1)
- Android实例 (2)
最新评论
-
zilong0536:
楼主您好:
请问发表博文支持图片的功能怎么实现啊,一直没有思路 ...
新浪微博开放平台开发-android客户端(3) -
nicegege:
小弟 学习了
帮助中国移动设计10086的排队小模块 -
zl7824516:
用什么技术没说啊
通告(公告),消息(站内短信),提醒的设计:通告 -
virusswb:
源码下载: SinaWeibo2 源码下载之后,将后缀改为ra ...
新浪微博开放平台开发-android客户端(3) -
Jimmyxu0311:
找不到源码下载
新浪微博开放平台开发-android客户端(3)
企业库的依赖注入模块Unity是一个轻量的、可扩展的依赖注入容器,支持构造函数注入、属性注入、方法调用注入。你可以用它创建企业库的对象,或者是自定义的对象。但是,Unity模块和企业库中的其他模块有很多的不同点:
- 你可以在不安装企业库的情况下,直接使用Unity模块的依赖注入功能。
- Unity模块可以通过配置信息来准备容器,也可以在运行的时候在代码中动态创建依赖关系。
- Unity模块不依赖于企业库的核心库和企业库的配置系统,它用自己内置的方法读取配置信息,如果需要的话,也可以从企业库的配置文件中读取Unity的配置信息。
Unity模块具有下面的优点:
- 提供了简单的对象创建,尤其是对于有继承关系的对象和有依赖关系的对象,提供了简单的代码实现。
- 支持抽象需求,允许开发者在运行的时候确定依赖关系,或者是在配置的时候指明依赖关系。
- 增加了灵活性,通过在容器中延迟组件之间的配置。
- 具有服务定位的能力,允许客户端存储和缓存容器。这在ASP.NET中相当有用,开发者可以将容器持久在ASP.NET的session或者是application中。
下面将包括一些列的主题,你可以看看Unity是否适合你的应用需求。
- 常用的解决方案。
- 示例代码
- Unity的亮点
- 什么时候使用Unity模块
一、常用的解决方案
Unity模块可以解决开发者面对的以组件为基础的开发中遇到的一些问题。现代的商业应用中,有许多用来实现特殊功能的业务对象和组件,还有一些组件可以独立实现一些功能,例如,日志、验证、授权、缓存和异常处理。
成功建立这种类型应用的关键,就是完成一个解耦的、松散耦合的设计。松散耦合的应用更灵活,并且更容易维护。同样,在开发的过程中,他们也很容易测试。你可以伪造那些有强依赖的对象,例如,数据库连接、网络连接、ERP连接和富客户端接口组件,来进行单元测试。
依赖注入是建立松散耦合应用的主要技术。它提供了一些处理对象之间依赖的方法。例如,一个处理客户信息的对象,可能会依赖于访问存储的对象,验证信息的对象,和检查用户是否具有更新权限的对象。依赖注入技术可以确保客户类被正确的初始化,加载上面用到的对象,特别在当依赖是抽象的时候。
下面的模式定义了处理这个过程的架构和开发方法:
- Inversion of Control(IOC)pattern。这种模式支持插件式的架构,使得对象可以查询其他需要的对象。
- Dependency Injection(DI)pattern。是一种特殊的IOC模式,是一种以面向接口为基础的编程技术,可以修改类的行为,但是不是通过修改类的内部实现。开发者使用接口编程,用一个容器在类中注入依赖的对象实例,注入对象实例的方法包括:接口注入,构造函数注入属性(setter)注入,方法调用注入。
- Interception pattern。这种模式引入另一种层次的间接性。在客户端和真实对象之间放一个对象。在客户端和真实对象之间有一个代理。客户端的行为通过代理和真实对象进行交互,以及其他需要交互的对象。
下面将向大家演示下列功能:
- 建立Unity容器
- 获取指定类型的对象
- 获取指定类型和注册名的对象
- 获取一个特殊类型的全部对象
- 使用BuildUp创建对象,而不是通过容器
- 为构造函数注入注释对象
- 为属性(setter)注入注释对象
- 为方法调用注入注释对象
另外,Unity的示例代码中还包含其他的技术,一个简单的MVP模式实现,和一个Event Broker服务作为自定义的容器扩展。
示例代码
使用依赖注入框架和反转控制技术,开发者可以生成自定义类的实例,和依赖其他对象的对象实例。Unity模块支持这些功能,开发者可以使用容器配置注入、构造函数注入、属性注入、方法调用注入,创建所有有依赖的对象实例。
Unity提供了两个方法,可以在容器中注册类型和映射关系。
- RegisterType,这个方法在容器中注册一个类型,在适当的时候,容器会创建一个指定类型的实例。可以通过类的attribute或者是调用Resolve方法来实现。创建的对象的生命周期,就是在参数中指定的生命周期。如果你没有提供生命周期参数,注册类型的生命周期是短暂的,意味着每次调用Resolve方法的时候,容器都会创建一个新的对象实例。
using Microsoft.Practices .EnterpriseLibrary.Logging;
using Microsoft.Practices.Unity;
namespace BeautyCode.ConApp
{
public interface IMyService
{}
public class CustomService:IMyService
{}
/// <summary>
/// Description of Class4.
/// </summary>
public class Class4
{
public Class4()
{
IUnityContainer myContainer=new UnityContainer ();
myContainer.RegisterType <IMyService,CustomService>();
IMyService myServiceInstance=myContainer.Resolve <IMyService >();
}
}
}
- RegisterInstance,这个方法在容器中注册一个已经存在实例的类型,生命周期可以指定。在生命周期里面,容器返回这个已经存在的实例。如果没有指定生命周期,实例的生命周期由容器控制。
using Microsoft.Practices .EnterpriseLibrary.Logging;
using Microsoft.Practices.Unity;
namespace BeautyCode.ConApp
{
public interface IMyService
{}
public class CustomService:IMyService
{}
/// <summary>
/// Description of Class4.
/// </summary>
public class Class4
{
public Class4()
{
IUnityContainer myContainer=new UnityContainer ();
CustomService customerServ=new CustomService ();
myContainer .RegisterInstance <IMyService >(customerServ );
IMyService myServiceInstance=myContainer.Resolve <IMyService >();
}
}
}
构造函数注入
如果开发者使用Unity的Resolve方法初始化的一个类有一个构造函数,构造函数有一个以上的参数,参数的类型是其他的自定义类,Unity容器会自动创建参数中描述的依赖对象。例如下面的CustomService类,依赖于一个LoggingService类。
{
public CustomService (LoggingService logger)
{
logger .WriteToLog("Some Value");
}
}
在运行的时候,开发者使用容器的Resolve方法创建一个CustomService的实例,容器也会在CustomService类型范围内创建一个LoggingService对象实例。
CustomService myInstance=myContainer .Resolve <CustomService >();
属性注入
除了构造函数注入,Unity还支持属性注入和方法调用注入。下面将讲述属性注入。一个ProductService类有一个属性,是一个叫做SupplierData的类,通过在属性上添加Denpendency特性实现属性注入。
{
}
public class ProductData
{
private SupplierData _supplier;
[Dependency ]
public SupplierData Supplier
{
get{return _supplier ;}
set{this._supplier=var;}
}
}
现在,使用Unity创建一个ProductData对象实例,会自动创建一个SupplierData类的实例作为ProductData对象的属性值。
未完待续。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
发表评论
-
NET 应用架构指导 V2 学习笔记(十六) 服务层设计指导
2010-06-04 00:13 526如果你的应用是通 ... -
NET 应用架构指导 V2 学习笔记(十七) 组件设计指导
2010-06-05 00:48 627组件提供了一种将 ... -
NET 应用架构指导 V2 学习笔记(十八) 表现层组件设计指导
2010-06-05 21:09 496本章讲述的是你在设计用户界面组件和表现层逻辑组件的时候应该 ... -
NET 应用架构指导 V2 学习笔记(十九) 表现层组件设计指导
2010-06-06 06:15 5605 决定数据绑定的 ... -
NET 应用架构指导 V2 学习笔记(二十) 业务组件设计指导
2010-06-07 06:58 581前言 业务组件 ... -
微软企业库5.0学习笔记(四十二)异常处理模块
2010-06-14 00:04 808企业库的异常处理 ... -
关于程序员在30岁、35岁之后怎么办的新思考
2010-06-14 10:40 596首先给大家问个好 ... -
NET 应用架构指导 V2 学习笔记(二十四) 跨层关注问题
2010-06-17 20:00 551概况 大部分的 ... -
微软企业库5.0学习笔记(四十三)数据验证模块
2010-06-19 08:07 966概况 任何接受用户或者是其他系统输入的应用,一定要确保 ... -
关于项目进度慢的思考----如何提高整体开发效率
2010-06-21 23:42 774我们都是软件行业 ... -
微软企业库5.0学习笔记(四十四)实战数据验证模块
2010-06-23 19:22 7971 在业务对象上添加验证 添加对程序集【Microso ... -
微软企业库5.0学习笔记(四十五)实战数据验证模块----高级篇
2010-06-24 19:41 9511、添加自定义的提示信息 验证失败的提示信息可以自定义 ... -
面向对象类设计的五大原则(一)单一职责原则Single Responsibility Principle
2010-06-29 15:45 738引言 面向对象类设计,或者说是面向对象设计,有五大原则 ... -
《深入浅出设计模式-中文版》读书笔记 开篇乱弹(一)
2010-07-01 06:42 624oreilly的《Head.First ... -
《深入浅出设计模式-中文版》读书笔记-继承与组合(三)
2010-07-03 16:53 581经过上一次的改造 ... -
《深入浅出设计模式-中文版》读书笔记-观察者模式(四)
2010-07-06 06:34 604今天要接触的是观 ... -
利用attribute实现简单的ORM
2010-07-09 15:27 649我不知道NH的ORM具 ... -
系统内部模块(子系统)之间的耦合以及模块(子系统)划分
2010-07-14 13:02 790题外话 最近已经在努力学习了,学习基本功,学习设计模式 ... -
《深入浅出设计模式-中文版》读书笔记-工厂模式(五)
2010-07-16 12:46 671今天给大家带来的是:工厂模式。 我们在代码中创建一个对 ... -
Head.First.Object-Oriented.Design.and.Analysis《深入浅出面向对象的分析与设计》读书笔记(一)
2010-07-18 21:47 640题外话 又是一本Head.First系列的书,这个系列 ...
相关推荐
Unity为微软推出的一个轻量级依赖注入容器,内带了一个名为StopLight的快速入门示例,基于WindowsForm技术构建,里面有大量的冗余代码。我将全部程序用WPF技术进行了重构,保留使用Unity的全部技术和程序的全部功能...
达内Unity课程四个月学习笔记达内Unity课程四个月学习笔记达内Unity课程四个月学习笔记达内Unity课程四个月学习笔记
Unity MVC实现依赖注入实例
[EntLib]微软企业库5 0 学习之路 第十步 使用Unity解耦你的系统 PART3 依赖注入
[EntLib]微软企业库5 0 学习之路 第十步 使用Unity解耦你的系统 PART2 了解Unity的使用方法(3)
该项目实例主要演示Unity容器实现依赖注入
深入 Unity 1.x 依赖注入容器.xps
Unity实现依赖注入基础Unity实现依赖注入基础Unity实现依赖注入基础Unity实现依赖注入基础
微软企业库Unity演示,用于平时研发用
Unity的依赖注入和Unity的基本用法(Dependency Injection With Unity)
第一步、基本入门 第二步、使用VS2010+Data Access模块建立多数据库项目 第三步、为项目加上异常处理(采用自定义扩展方式记录到数据库...扩展学习篇、库中的依赖关系注入(重构 Microsoft Enterprise Library)[转]
常常使用 Spine 来制作一些动画,这个插件是用来让unity可以播放spine制作的动画
使用Unity.MVC3在asp.net mvc3中实现依赖注入 有具体使用步骤
WPF PRISM开发入门二(Unity依赖注入容器使用)-附件资源
实现依赖注入:1、构造函数注入。2、属性注入。3、接口注入。4、IOC容器注入。5、Unity注入,根据配置文件
ASP.NET MVC5 六层框架+Bootstrap+Unity依赖注入。
unity游戏简易物体碰撞器编辑插件Easy Collider Editor 4.1 所支持的Unity版本:5.3.6或更高 (并不是所有高版全部都兼容的,具体以unity官网为准,这里的支持版本是复制unity官网的,并不准确,大家自行测试)
使用微软企业库5.0和vs2010编写支持数据库操作,独立的封装类,易于使用和 理解!
unity学习笔记 unity shader unity数据存储方式 DoTween插件常用API
[EntLib]微软企业库5 0 学习之路 第十步 使用Unity解耦你的系统 PART4 Unity&PIAB