.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. hdu3037Saving Beans

    Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission ...

  2. cocos2dx 子弹飞作为一个例子来解释解酒效果类CCMotionStreak

    感谢点评与关注,欢迎转载与分享. 勤奋努力,持之以恒! 在游戏开发中,有时会须要在某个游戏对象上的运动轨迹上实现渐隐效果.比方子弹的运动轨迹,假设不借助引擎的帮助.这样的效果则须要通过大量的图片来实现 ...

  3. 初识 Cloudera Impala

    Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据.已有的Hive系统尽管也提供了SQL语义,但因为Hive底层 ...

  4. Signed comparison in Verilog

    Signed comparison in Verilog¶ When you write this in Verilog: wire [7:0] a; wire [7:0] b; wire less; ...

  5. Install Typical IIS Workloads

    原文 Install Typical IIS Workloads Introduction The IIS 7.0 and above modular architecture is designed ...

  6. git merge简介(转)

    git merge的基本用法为把一个分支或或某个commit的修改合并现在的分支上.我们可以运行git merge -h和git merge --help查看其命令,后者会直接转到一个网页(git的帮 ...

  7. [LeetCode] 036. Valid Sudoku (Easy) (C++)

    指数:[LeetCode] Leetcode 解决问题的指数 (C++/Java/Python/Sql) Github: https://github.com/illuz/leetcode 036. ...

  8. thinkphp学习笔记6—url模式

    原文:thinkphp学习笔记6-url模式 入口文件是应用的唯一入口,因为可以多入口,每个应用可以对应一个入口文件,系统会从rul参数中解析当前请求的模块,控制器,操作.ThinkPHP是区分大小写 ...

  9. Unity3D的SerializeField 序列化域名

    SerializeField Inherits from Attribute Force Unity to serialize a private field. 强制Unity去序列化一个私有域. Y ...

  10. warning: shared library text segment is not shareable

    warning: shared library text segment is not shareable error: treating warnings as errors 近期在调试一个Gsen ...