使用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; 
}

以下的代码示例怎样创建一个Unity容器并注册一个在ManagementController实例化时需要的ITenantStore类型的实际类型

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

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

解析

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

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

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

销毁

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏深度学习之tensorflow实战篇

hive排序:distribute by 、sort by 、cluster by 、order by 区别

 3 . 总结分析 1). order by 只有一个reduce负责对所有的数据进行排序,若大数据量,则需要较长的时间。建议在小的数据集中使用order b...

2474
来自专栏Pythonista

定制自己的数据类型(二次加工标准类型(包装))

包装:python为大家提供了标准数据类型,以及丰富的内置方法,其实在很多场景下我们都需要基于标准数据类型来定制我们自己的数据类型,新增/改写方法,这就用到了我...

651
来自专栏自动化测试实战

《selenium2 python 自动化测试实战》(9)——切换窗口

4155
来自专栏web前端教室

return的值都去哪了?去哪了,“谁伸手了,return的结果就给谁”

事情是这样,今天的前端零基础课在讲购物车模块,其中的全部商品中的被选中商品的总数和价格,是先要获得所有被选中的单项商品数量和单价,然后发送给接口进行计算的。这其...

1985
来自专栏青枫的专栏

c语言基础学习10_文件操作01

============================================================================= ==...

643
来自专栏IT笔记

Linux下安装Redis3

下载 下载地址 http://redis.io/download Linux 下执行 wget http://download.redis.io/relea...

3165
来自专栏黒之染开发日记

nodejs学习笔记

1、module.exports+require很好用,可以用来做全局变量,比如在a.js中require了一个js,并且修改了这个js的一个属性,然后b.js...

613
来自专栏专注研发

文件操作

函数原型:void open(const char*filename,int mode,int access);      

752
来自专栏大内老A

[WCF权限控制]WCF自定义授权体系详解[原理篇]

到目前为止,我么介绍的授权策略都是围绕着安全主体进行的,基本上都是基于角色的授权。虽然角色是定义权限最为常用的形式,但是它解决不了授权的所有问题。基于角色的授权...

1929
来自专栏博客园

Redis命令与配置

    slaveof  127.0.0.1 6379(设置Mater的Host以及Port)

1064

扫码关注云+社区