首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Unity IOC器皿的简单应用

2012-08-11 
Unity IOC容器的简单应用Unity是Unity是微软patterns& practices组用C#实现的轻量级,可扩展的依赖注入容器

Unity IOC容器的简单应用

       Unity是Unity是微软patterns& practices组用C#实现的轻量级,可扩展的依赖注入容器,它为方便开发者建立松散耦合的应用程序,

有以下优点:

        1.简化了对象的创建,特别是针对分层对象结构和依赖关系;

   2.需求的抽象,允许开发人员在运行时或配置文件中指定依赖关系,简化横切关注点的管理;

   3.推迟为容器配置组件的时机,增加了灵活性;

   4.服务定位能力,这使客户能够存储或缓存容器;

        5.实例和类型拦截

下载地址: http://unity.codeplex.com/

目前最新的版本为 unity 3.0 for .net 3.5 preview

 以下程序用的是2.1版本


下面开始Unity之旅


 (一) 我的第一个Unity Demo


新建一个控制台应用程序,引用Microsoft.Practices.Unity.dll文件; 

新建一个鸟类的接口,定义一个鸟叫的方法;



这个小实例已经实现了简单的IOC控制反转.

当一个接口有两个实现怎么办呢?是不是在加一个类似于下边的代码就行了呢? 下面试一下.

unityContainer.RegisterType<IBird, Swallow>();我们在原有的程序中加一个Sparrow类,实现IBird接口:



嗯?这是什么情况,为什么是麻雀在叫..而不是燕子叫呢? 原来

当一个接口有多个实现,而且没有用别名区分时,就会选择最后一个注入的实现;


下边给每个注入都加上别名:

这才是我们想要的结果,哈哈.....

当一个接口有多个实现时,需要通过别名区分。


(二) Unity的构造函数注入


新建 一个IBirdHome 接口,并对接口进行实现:



我们只是通过Unity得到了一个IBirdHome实现,但并没有对 IBird Swallow { get; set; } 进行实例化,但结果已经运行出来,并没有报错.

原来这些工作Unity已帮我们做了,我们可以偷个懒了.嘿嘿.......


(三)属性注入


把BirdHome类的中构造函数去掉,在属性上加上[Dependency]特性



欢迎大家前来拍砖........!


生命不息,编程不止!




热点排行