.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. mac已安装xctool而简单的执行xctool打包

    先安装brew,brew是一个包管理工具,有了它我们就能够非常方便的安装xctool了,brew安装命令例如以下: curl -LsSf http://github.com/mxcl/homebrew ...

  2. Swing 显示良好JPanel保存为图片

    在JFrame例如,下面的代码被添加 //自己的JPanel DrawPanel drawPanel = new DrawPanel(list, width, height, start, end); ...

  3. Android高级编程笔记(四)深入探讨Activity(转)

    在应用程序中至少包含一个用来处理应用程序的主UI功能的主界面屏幕.这个主界面一般由多个Fragment组成,并由一组次要Activity支持.要在屏幕之间切换,就必须要启动一个新的Activity.一 ...

  4. kendoui仪表板和直方图 演示样本

    到那个时刻kendeodui我相信大家一定不陌生.该js在绘画方面的好成绩. 现在来看看 它的仪表盘和直方图效果: html和js代码例如以下: <!DOCTYPE html> <h ...

  5. SQL操作语句中的注意点

    一 查询语句 1 distinctkeyword消除反复行 当查询的结果数据中出现反复数据时.在查询条件中加上distinctkeyword消除反复行: 如:select distinct Sno f ...

  6. 【日常学习】【欧拉功能】codevs2296 荣誉的解决方案卫队的一个问题

    转载请注明出处 [ametake版权全部]http://blog.csdn.net/ametake欢迎来看看 题目来源:SDOI2008 文章被剽窃非常严重啊 所以以后都带上版权信息 先上题目 题目描 ...

  7. ARP协议的基础知识

          关于ARP协议的基础知识 1.ARP的工作原理 本来我不想在此重复那些遍地都是的关于ARP的基本常识,但是为了保持文章的完整性以及照顾初学者,我就再啰嗦一些文字吧,资深读者可以直接跳过此节 ...

  8. express: command not found.

    npm install -g express 可是不行.全局模式不行. With the release of Express 4.0.0 it looks like you need to do s ...

  9. C#按LastID进行分页——与lambda形成链式

    public static class PageHelper { /// <summary> /// 按页码分页 /// </summary> /// <param na ...

  10. java_部署jar

    javaw -ms100m -mx256m -jar MyApp.jar 上面指定了使用最小100M最大256M内存. 4)如果main函数要带参数 java -mss10m -mx300m -jar ...