Unity依赖注入容器

发布: 2009-3-31 12:31 | 作者: softworker | 来源: 青软培训-踏踏实实育人-勤勤恳恳奉献

  objectbuilder是一个可扩展的application block,同时也是unity的基础。对于objectbuilder到底是什么有很多不同的理解,最普遍的描述是:objectbuilder是“依赖注入的工具”,还有一种说法是“构建依赖注入容器的框架”,这些多少都有些出入。应该说objectbuilder是一个可配置的对象工厂。
  objectbuilder有两个版本,习惯称之为ob1和ob2。ob1在objectbuilder的网站上就可以down,ob2可以说目前只流传于民间:)为什么这么说?因为目前只能从unity的ctp版本中或者sample中得到,估计是会跟随unity的release一块儿发布。
  对于ob1,黄忠成先生的object builder application block系列写得清晰透彻,当然,经过吕震宇先生的简体翻译:[转]object builder application block,可读性更上一层楼了。
  ob2在ob1的基础上可以说有了很大的改动,这里可以参考chris的最新的一些blog,顺带说一句,这些blog读起来就要费些脑筋了,如果你不是真的想对objectbuilder弄个门清的话,那其实理解一下黄忠成先生文章中提到的一些概念和思想就足够了。
    unity是什么?
  unity是patterns & practices团队开发的一个轻量级、可扩展的依赖注入容器,具有如下的特性:
  1. 它提供了创建(或者装配)对象实例的机制,而这些对象实例可能还包含了其它被依赖的对象实例。
  2. unity允许将预先配置的对象注入到类中,实现了inversion of control (ioc)的功能。在unity中,支持constructor injection(构造器注入), property setter injection(属性设值注入)以及method call injection(方法注入)。ps:这里的方法注入与martin fowler定义的接口注入类似而稍有区别。
  3. 支持容器的体系结构。一个容器可以有子容器,允许从子容器到父容器的对象定位查询。
  4. 可以通过配置文件进行准备和配置容器。
  5. 不会影响到类的定义(属性设值注入和方法注入除外),这也是轻量级容器的一个体现。
  6. 支持自定义的容器扩展。
   
   使用unity,最基本步骤有三步。
  1. 建立容器;
  2. 将接口与类的映射注册到容器中;
  3. 从容器中解析出正确的对象。

      例子:
  step0. 准备工作
  ilogger接口:
<img style="cursor: pointer" onclick="javascript:window.open(this.src);" alt="unity(三):快速入门" src="http://www.ymdg.net/article/uploadpic/2009-1/2009121101827219.png" onload="return imgzoom(this,550);" border="0" />  
  consolelogger类:
<img style="width: 431px; cursor: pointer" onclick="javascript:window.open(this.src);" alt="unity(三):快速入门" src="http://www.ymdg.net/article/uploadpic/2009-1/2009121101827137.png" onload="return imgzoom(this,550);" border="0" />  
  nulllogger类:
<img style="cursor: pointer" onclick="javascript:window.open(this.src);" alt="unity(三):快速入门" src="http://www.ymdg.net/article/uploadpic/2009-1/2009121101827125.png" onload="return imgzoom(this,550);" border="0" />
  step1. 创建容器
  在unity中创建容器实例最简单的方法是直接使用构造函数创建,如下代码所示:
  iunitycontainer container = new unitycontainer();
  step2. 注册接口映射
  在unity中提供了一组register方法供我们在容器中注册接口映射,如下代码所示:
  container.registertype<ilogger, consolelogger>();
  step3. 获取对象实例
  在unity中提供了一组resolve方法用以获取对象实例,如下代码所示:
  ilogger logger = container.resolve<ilogger>();
  ok,就这么简单!
  测试:
<img style="cursor: pointer" onclick="javascript:window.open(this.src);" alt="unity(三):快速入门" src="http://www.ymdg.net/article/uploadpic/2009-1/2009121101828471.png" onload="return imgzoom(this,550);" border="0" />
  场景一:注册一个consolelogger作为ilogger的实现到容器中,然后从容器中解析ilogger的实现,并调用ilogger的log方法。
<img style="cursor: pointer" onclick="javascript:window.open(this.src);" alt="unity(三):快速入门" src="http://www.ymdg.net/article/uploadpic/2009-1/2009121101828505.png" onload="return imgzoom(this,550);" border="0" />
  结果:
<img style="cursor: pointer" onclick="javascript:window.open(this.src);" alt="unity(三):快速入门" src="http://www.ymdg.net/article/uploadpic/2009-1/2009121101828333.png" onload="return imgzoom(this,550);" border="0" />
  场景二:注册一个nulllogger作为ilogger的实现到容器中,然后从容器中解析ilogger的实现,并调用ilogger的log方法。
<img style="cursor: pointer" onclick="javascript:window.open(this.src);" alt="unity(三):快速入门" src="http://www.ymdg.net/article/uploadpic/2009-1/2009121101828645.png" onload="return imgzoom(this,550);" border="0" />
  结果:
<img style="cursor: pointer" onclick="javascript:window.open(this.src);" alt="unity(三):快速入门" src="http://www.ymdg.net/article/uploadpic/2009-1/2009121101828789.png" onload="return imgzoom(this,550);" border="0" />
Google




姓名:
电话:
QQ或MSN:
您也可以拨打青软培训咨询电话预定周末免费技术讲座:    0532-85025005
王老师 尚老师 吴老师 于老师 谷老师

优秀就业学员

    青软培训-软件培训专家-王阿秀-青岛仁科 青软培训-软件培训专家-张琦-上海商联科技-JavaEE软件开发 青软培训-软件培训专家-刘奇-山东拓能集团-ASP.NET软件开发 青软培训-软件培训专家-郑磊-青岛乾懿德-网络部经理