使用Unity创建依赖注入
这篇文章翻译自《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创建依赖注入的更多相关文章
- Entity Framework 实体框架的形成之旅--利用Unity对象依赖注入优化实体框架(2)
在本系列的第一篇随笔<Entity Framework 实体框架的形成之旅--基于泛型的仓储模式的实体框架(1)>中介绍了Entity Framework 实体框架的一些基础知识,以及构建 ...
- .NET 使用unity实现依赖注入
原文地址:http://www.cnblogs.com/wujy/p/3317795.html 一:理论部分 依赖注入:这是 Ioc 模式的一种特殊情况,是一种基于改变对象的行为而不改变类的内部的接口 ...
- ASP.NET MVC中使用Unity进行依赖注入的三种方式
在ASP.NET MVC中使用Unity进行依赖注入的三种方式 2013-12-15 21:07 by 小白哥哥, 146 阅读, 0 评论, 收藏, 编辑 在ASP.NET MVC4中,为了在解开C ...
- 运用Unity实现依赖注入[结合简单三层实例]
运用Unity实现依赖注入[结合简单三层实例] 一:理论部分 依赖注入:这是 Ioc 模式的一种特殊情况,是一种基于改变对象的行为而不改变类的内部的接口编程技术.开发人员编写实现接口的类代码,并基于接 ...
- 在 mvc 4 中使用 unity 进行依赖注入
在 mvc 4 中使用 unity 进行依赖注入 关于依赖注入的概念,这里就不再叙述了,我们用 mvc 4 结合 unity,使用构造函数来进行依 赖注入.具体步骤如下: 1. 首先建立 一个 mvc ...
- Asp.Net MVC4 使用Unity 实现依赖注入
项目创建参考 上一篇 <<Asp.Net MVC5 使用Unity 实现依赖注入>>, 不同的是这里是 Unity.MVC4 装好后会出现 然后示例说在这里写对应关系 ...
- IOC使用Unity 实现依赖注入
转自:http://www.cnblogs.com/techborther/archive/2012/01/06/2313498.html http://www.cnblogs.com/xishuai ...
- 运用Unity实现依赖注入[有参构造注入]
上一篇章讲到关于使用Unity实现依赖注入的简单功能,针对有博友提出关于有参构造注入的问题; 本文同样通过一个实例来讲解如何实现此功能,文中一些分层讲解可以看上一文章(运用Unity实现依赖注入[结合 ...
- 在ASP.NET MVC中使用Unity进行依赖注入的三种方式
在ASP.NET MVC4中,为了在解开Controller和Model的耦合,我们通常需要在Controller激活系统中引入IoC,用于处理用户请求的 Controller,让Controller ...
随机推荐
- 八.安装Nginx
http://blog.csdn.net/grhlove123/article/details/47834673
- 3springboot:springboot配置文件(配置文件、YAML、属性文件值注入<@Value、@ConfigurationProperties、@PropertySource,@ImportResource、@Bean>)
1.配置文件: springboot默认使用一个全局配置文件 配置文件名是固定的 配置文件有两种(开头均是application,主要是文件的后缀): ->application.prope ...
- ROBOCOPY——Windows 的可靠文件复制
复制指定类型文件 (-s :含子目录 不包括空目录) 复制所有 (-e :含子目录 包括空目录) 复制指定成层级内的 (-lev:n 仅复制源目录树的前 n 层) 复制排除给定类型后的 (-xf) ...
- Telnet配置
一.环境 路由 IP:192.168.56.2 本地云 IP:192.168.56.1 二.认证模式 AAA模式 认证 授权 计费的安全技术 当配置用户界面的认证方式为AAA时, 用户登录设备时需要首 ...
- es6之数据结构
1.set的用法 用add方法添加元素,添加的数组不可重复. 可利用set类型添加元素不重复的功能,给数组完成去重的功能 size属性用于获取set元素的长度 { let list =new Set( ...
- springboot——我的第一个工程
前言:使用Spring Boot 微服务架构有一段时间了,打算从今天开始记录使用过程. 一.Spring Boot介绍: 简介:Spring Boot 框架的产生,是为了方便我们简化Spring 框架 ...
- Junit报错Initialization Error
出错原因是没有把方法声明为public
- Java中int和String的转换问题
int -> String int i=12345;String s="";第一种方法:s=i+"";第二种方法:s=String.valueOf(i); ...
- WPF几个样式
其实也是大家学的最多的,网上的. 1.老版360 2.360悬浮窗 不好意思,没有找到悬浮球的图片,随便一个代替了 3.老版迅雷 4.新版360 遗憾的是这个样式没有完整的源代码.只是一个演示和图片代 ...
- 常用Sql server 自定义函数
/****** 对象: UserDefinedFunction [dbo].[fun_get_LowerFirst] 脚本日期: 08/04/2012 13:03:56 ******/ IF EXIS ...