这篇文章翻译自《Dependency Injection With Unity》第三章。文中提到的类似“前几节”的内容您不必在意,相信您可以看懂的。

P.S:如果您想看到的是关于Unity 3D的内容,您可以轻击返回按钮了。

 

    在前几节,您看到为什么要使用依赖注入以及依赖注入和其他解耦方法的区别。在本章中您将看到怎么样使用Unity依赖注入容器去更简单的在您的应用程序中添加依赖注入框架。在这个过程中,您将看到怎样将Unity应用在实际应用程序中的一些例子

依赖注入生命周期:注册、解析、销毁

在前几个章节中,您看到了ManagementController类有一个构造方法期望在继续构造之前注入以后类型为实现饿了ItenantStore类型的对象,有两件事情发生在这里:

一些东西需要决定怎么样史丽华一个实现了ITenantStore借口的类型的对象,然后再应用程序中史丽华这个对象和ManagementController对象。

       我们将参考第一个任务作为Registration和第二个作为分辨者,在接下来以同样的效果,应用程序将会结束使用ManagementController对象,等待垃圾回收机制回收,同样,它也要通知垃圾回收机取销毁这个ITenantStore类型的对象,如果其他客户端类不在使用这个实例。

      Unity容器可以管理注册、解析、销毁的周期,以便我们简单的在您的应用程序中使用依赖注入。接下来的章节示例将用一个简单的例子演示这个周期。再接下来,您将看到一个更加复杂的实际应用实例并学习其他一些使用方式。

   注册

使用Unity容器,您可以注册一个映射集合去决定一个构造函数(属性或者方法)去使用哪个实际类型,唯一标识这个类型作为一个结构类型或者父类型去注入。一个提示,这里有一份在ManagementController类型中的构造方法显示依赖一个实现了ITenantStore结构的类型的对象。

public ManagementController(ITenantSore tenantStore)
{
this.tenantStore = tenantStore;
}

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }          以下的代码示例怎样创建一个Unity容器并注册一个在ManagementController实例化时需要的ITenantStore类型的实际类型

 
var container = new UnityContainer();
container.RegisterType<ITenantStore, TenantStore>();

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

RegsterType方法表示告诉容器在一个构造函数或者方法或者属性需要一个ITenantStore实例注入时,实例化一个TenantStore对象给它。这个例子是一个很简单的类型映射让您可以定义使用Unity容器。在后面的章节中,您将看到在Unity容器中注册类型和对象的一些方法,可以适用于更复杂的情形,具有更好的灵活性。

解析

RegisterType方法的使用方式已经在前几节中定义了接口类型和实际类型的映射。在实例化ManagementController和TenantStore对象时,您必须调用Resolve方法。

var controller = container.Resolve<ManagementController>();

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

在这个示例中,您不需要直接去实例化ManagementController,而是使用Unity容器以便容器可以解析所有的依赖关系。在这个简单的示例中,依赖关系的解析式对一个ITenantStore对象的。在这个场景中,Unity容器第一个构造TenantStore对象并且通过它去构造一个ManagementController类。

销毁

在这个简单的示例中在前几节中掩饰了注册和解析类型,应用程序存在一个ManagementController类型的controller变量,当您调用Resolve方法时,Unity容器创建以个新的TenantStore实例去注入。当controller变量离开它的作用域,这个TenantStore对象也将进入垃圾回收集合中。

使用Unity创建依赖注入的更多相关文章

  1. Entity Framework 实体框架的形成之旅--利用Unity对象依赖注入优化实体框架(2)

    在本系列的第一篇随笔<Entity Framework 实体框架的形成之旅--基于泛型的仓储模式的实体框架(1)>中介绍了Entity Framework 实体框架的一些基础知识,以及构建 ...

  2. .NET 使用unity实现依赖注入

    原文地址:http://www.cnblogs.com/wujy/p/3317795.html 一:理论部分 依赖注入:这是 Ioc 模式的一种特殊情况,是一种基于改变对象的行为而不改变类的内部的接口 ...

  3. ASP.NET MVC中使用Unity进行依赖注入的三种方式

    在ASP.NET MVC中使用Unity进行依赖注入的三种方式 2013-12-15 21:07 by 小白哥哥, 146 阅读, 0 评论, 收藏, 编辑 在ASP.NET MVC4中,为了在解开C ...

  4. 运用Unity实现依赖注入[结合简单三层实例]

    运用Unity实现依赖注入[结合简单三层实例] 一:理论部分 依赖注入:这是 Ioc 模式的一种特殊情况,是一种基于改变对象的行为而不改变类的内部的接口编程技术.开发人员编写实现接口的类代码,并基于接 ...

  5. 在 mvc 4 中使用 unity 进行依赖注入

    在 mvc 4 中使用 unity 进行依赖注入 关于依赖注入的概念,这里就不再叙述了,我们用 mvc 4 结合 unity,使用构造函数来进行依 赖注入.具体步骤如下: 1. 首先建立 一个 mvc ...

  6. Asp.Net MVC4 使用Unity 实现依赖注入

    项目创建参考 上一篇   <<Asp.Net  MVC5  使用Unity 实现依赖注入>>, 不同的是这里是 Unity.MVC4 装好后会出现 然后示例说在这里写对应关系 ...

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

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

  8. 运用Unity实现依赖注入[有参构造注入]

    上一篇章讲到关于使用Unity实现依赖注入的简单功能,针对有博友提出关于有参构造注入的问题; 本文同样通过一个实例来讲解如何实现此功能,文中一些分层讲解可以看上一文章(运用Unity实现依赖注入[结合 ...

  9. 在ASP.NET MVC中使用Unity进行依赖注入的三种方式

    在ASP.NET MVC4中,为了在解开Controller和Model的耦合,我们通常需要在Controller激活系统中引入IoC,用于处理用户请求的 Controller,让Controller ...

随机推荐

  1. PHP----练习------球队列表

    题目:页面上有一个ul球队列表当鼠标移动到某个li上的时候改行背景颜色变红,当点击某个li的时候,让该li之前的所有li背景色变黄,之后的所有li背景色变蓝.自己不变色. <!DOCTYPE h ...

  2. Yii2.0 请求

    1.获取请求参数 $request = Yii::$app->request; $get = $request->get(); // 等价于:$get = $_GET; $id = $re ...

  3. 使用ByPropertyName进行管道传输

    管道参数绑定的两种方式: 可通过 help command -full查看 不同:简单讲ByPropertyName可以使B的多个参数被同时使用 使用ByPropertyName进行管道传输: 建立一 ...

  4. Tomcat整体介绍

    来源 本文整理自 <Tomcat内核设计剖析>.<Tomcat结构解析> Tomcat 整体架构 ​ 如上图所示:包含了Tomcat内部的主要组件,每个组件之间的层次包含关系很 ...

  5. java中prepareStatement与createStatement的区别

    首先来看两段代码: 第一个使用createStatement() public void delete( int id){ try { Connection c = DBUtil.getConnect ...

  6. 【洛谷P1982】小朋友的数字

    小朋友的数字 题目链接 题目翻译: 每个小朋友有一个数字,构成一个数字序列a1,a2…an 我们定义“特征值”fi为a1~ai中的最大连续子段和 再定义“分数”si为1~i-1中最大的(sj+fj), ...

  7. 【luogu P3366 最小生成树】 题解 Prim

    include include include include using namespace std; const int maxn = 505000; int n, m, dis[maxn], v ...

  8. java soa接口测试,可以使用http协议调用

    post调用url:“接口url”+/rpc post调用参数body: { "ver": "接口版本号", "soa":{"re ...

  9. canvas背景

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. Maven常用的构建命令

    1.mvn -v 查看maven版本 2.mvn compile 编译项目,生成target文件夹,其中包含编译生成的字节码文件和测试报告.打开cmd,cd到项目的根目录,运行该命令如图所示(如果是第 ...