.Net IOC 之Unity

在码农的世界里,为了应付时常变更的客户需求,增加的架构的客扩展性,减少工作量。IOC诞生了,它是一种可以实现依赖注入和控制对象生命周期的容器。最为一个有节操、有追求的码农来说,掌握几种IOC以来注入的技术是必不可少的。帅的人至少要会两种以上。在.net世界里,如今常用的注入容器有Unity、Autoface、Ninject当然Spring.net也算。
在没有IOC之前,伟大的码农们,大多数软件开发都使用DI手动完成构造函数、属性、方法的依赖,来实现解耦,通俗易懂的话就是完全的接口编程。

今天我们了解一下Unity,Unity是微软的一种用于C#实现的依赖注入容器,可通过Xml文件或代码来建立对象之间的关系在运行时直接调用容器,便可获取依赖产生的对象,建立耦合度较低的应用程序。Microsoft.Practices.Unity.dll和Microsoft.Practices.Unity.Configuration.dll这两个程序集是Unity里面的集成类库,用于Unity对象操作和配置的类库。

使用Unity的好处就是调用方法时将相应的controllerType传递给Unity容器,Unity容器便会自己完成对象创建的操作,并将对象返回给请求。再也不用考虑如何对象从哪里来的问题。Unity在管理生命周期时创建对象自带了Transient(瞬态)、Singleton(单例)两种方式,从字面上看,transient在用户每次请求容器中对象时,都会创建新的对象,完成相应后会自动销毁,而SingleTon它不会立即销毁会供多个应用请求提供相同的对象。你可以把这两种产生的对象,想象成request和application产生的对象,有点类似。
下面结合.NetMvc4举个例子来看一下它的使用:

1、使用NUGET获取并安装Unity,如图:

安装完后在引用中可以看到Unity的两个重要的DLL程序集,并生成Bootstrap.cs引导文件, 下面我们可以开始我们的 编程了,这次使用xml配置Unity。

2、建立项目工程,如图:

顺序没排好,正确顺序如下:

(1)MvcIOCUnity MVC —— 应用程序

(2)ImpLab  ——仓储的实现类

(3)RepositoryLab —— 方法仓储接口

(4)ModelLab——基础对象模型类

程序从下而上进行编码:

ModelLab——基础对象模型类,中创建模型

 

RepositoryLab —— 方法仓储接口

ImpLab  ——仓储的实现

 MvcIOCUnity MVC —— 应用程序

第一步配置Uinit

 Unity xml 配置

第二步在BootStrap中读写Xml配置生成容器,并在Global中注册,让网站启动时便将容器准备完毕。

 Bootstrap调用xml创建容器
 Global注册

第三步 创建UnityDependencyResolver

DependencyResolver.SetResolver(new UnityDependencyResolver(container));这行代码用于解析装载为Mvc依赖关系提供了一个解析程序的接口。参数必须是个继承IDependencyResolver的对象。

 创建UnityDependencyResolver

第四步 通过DefaultControllerFactory工厂获取ContorllerType和请求上下文,使用IUnityContainer进行解析

 创建UnityControllerFactory

第五步 使用容器创建的对象

 创建FamilyController

第六步创建试图,收工

源代码奉上:http://pan.baidu.com/s/1i3L1kd3

 

 
 
标签: IOC UNITY

.Net IOC 之Unity的更多相关文章

  1. ASP.NET MVC IOC之Unity攻略

    ASP.NET MVC IOC之Unity攻略 一.你知道IOC与DI吗? 1.IOC(Inversion of Control )——控制反转 即依赖对象不在被依赖模块的类中直接通过new来获取 先 ...

  2. IOC容器Unity的使用及独立配置文件Unity.Config

    [本段摘录自:IOC容器Unity 使用http://blog.csdn.net/gdjlc/article/details/8695266] 面向接口实现有很多好处,可以提供不同灵活的子类实现,增加 ...

  3. [IoC容器Unity]第四回:使用范例

    1.引言 前面几个章节介绍了Unity的基本使用,主要分为程序和配置文件两种方法的使用,可以参考一下链接, [IoC容器Unity]第一回:Unity预览 [IoC容器Unity]第二回:Lifeti ...

  4. 我心中的核心组件(可插拔的AOP)~第十二回 IoC组件Unity

    回到目录 说在前 Ioc组件有很多,之前也介绍过autofac,castle等,今天再来说一下在微软Nlayer DDD架构里使用的unity组件,今天主要说一下依靠注入,如果希望看拦截的用法,可以阅 ...

  5. 第十六回 IoC组件Unity续~批量动态为Unity添加类型和行为

    回到目录 之前的一篇Unity的文章主要是基本的实现,并没有什么特别的地方,使用Unity可以方便的实现应用程序的IoC控制反转,这给我们的应用程序在耦合度上变得高了,同时可测试性加强了,当然,这些的 ...

  6. IoC组件Unity再续~根据类型字符串动态生产对象

    回到目录 这个根据类型字符串动态去生产一个接口的对象,在实现项目中用途很广,这即省去了配置config文件的麻烦,又使用生产对象变更可配置,你完全可以把这种多态持久化到数据库里或者XML文件里,在使用 ...

  7. IOC使用Unity 实现依赖注入

    转自:http://www.cnblogs.com/techborther/archive/2012/01/06/2313498.html http://www.cnblogs.com/xishuai ...

  8. [IoC容器Unity] :Unity预览

    1.引言 高内聚,低耦合成为一个OO架构设计的一个参考标准.高内聚是一个模块或者一个类中成员跟这个模块或者类的关系尽量高,低耦合是不同模块或者不同类之间关系尽量简单. 拿咱国家举例来说,假如你是中国人 ...

  9. 控制反转-Ioc之Unity

    本篇幅主要介绍控制反转的一些概念,和如何使用Unity实现Ioc.在介绍的时候,会尽量结合代码来讲解一些概念. 1.什么是DI? DI即控制反转,是将对具体实现类的依赖转变为对接口的依赖,这样在编程中 ...

随机推荐

  1. 8年,属于 HTML 5 春天的到来悄悄!

    [核心提示] 在 8 年时间中,HTML 5 为整个行业都带来了什么.标准终于确定后又会产生什么样的变革呢? 微博微信Twitter对于非常多人来说,非常有可能在微信的朋友圈里玩过「围住神经猫」,也非 ...

  2. POJ 3280 间隔DP

    字符串,每次插入或删除字符需要一定的价格,问:我怎样才能使这个字符串转换成字符串回文,花最少. 间隔DP 当DP到区间[i,j+1]时,我们能够在i-1的位置加入一个str[j+1]字符,或者将在j+ ...

  3. Meteor全栈开发平台

    Meteor全栈开发平台 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博客地址为http://www.cnblogs.com/jasonno ...

  4. JQuery读取Exif信息

    <!DOCTYPE html> <html> <head> <script type="text/javascript" src=&quo ...

  5. hdu 1426 Sudoku Killer ( Dancing Link 精确覆盖 )

    利用 Dancing Link 来解数独 详细的能够看    lrj 的训练指南 和 < Dancing Links 在搜索中的应用 >这篇论文 Dancing Link 来求解数独 , ...

  6. python 时间处理

    在实践中,时间处理遇到的问题,需要 Sep 06, 2014 19:30 (UTC 时间) 和 比较当前时间,早晚.知道 此 2014-09-06 19:30 格时间表达式.因此,在处理,通缉 先将s ...

  7. android download学习记录

    东西拼凑,最终弄出来能够用的代码 [1].[代码] [Java]代码 跳至 [1] ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...

  8. EntityFramework:状态变化与方法的关系

    一.约定    OnModelCreated 有一些限制需要注意,例如:    1.表名不支持使用标签进行标注    2.最小长度在 OnModelCreated 中不支持    3.正则表达式在 O ...

  9. javascript之Style物

    Background 属性 属性                                 描写叙述 background                      在一行中设置全部的背景属性 ...

  10. linux_无密登录

    使用下例中ssky-keygen和ssh-copy-id,仅需通过3个步骤的简单设置而无需输入密码就能登录远程Linux主机. ssh-keygen 创建公钥和密钥. ssh-copy-id 把本地主 ...