专栏首页技术小讲堂使用Unity创建依赖注入依赖注入生命周期:注册、解析、销毁   注册解析销毁

使用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 条评论
登录 后参与评论

相关文章

  • LINQ to SQL(4):OR设计器

    在我们使用LINQ to SQL的时候,需要大量的使用OR设计器,虽然我们手工写代码也是完全可以实现的,但是OR设计器是非常强大的工具,我想有了它,没有几个人会...

    小白哥哥
  • 使用GUI工具高效构建你自己的Nuget包丰富包的基础信息添加要包含的文件The end

    写这篇文章的原因是我在学习构建nuget包的时候,发现了一个官方推荐的GUI工具,而官方的工具介绍文章已经过时,一些地方和现在最新版本的工具有些差异,所以特意利...

    小白哥哥
  • ASP.NET5 中静态文件的各种使用方式服务端的静态文件开启目录浏览呈现默认文件使用UseFileServer方法文件类型基于IIS的考虑最佳实践

    所谓静态文件,包含HTML文件,css文件、图片文件和js文件等,他们是服务器直接读取到客户端的一些资源,在这篇文章中,我们将解释关于ASP.NET5和静态文件...

    小白哥哥
  • ContainerX 推进Docker企业级应用

    在过去的一年里, 容器推动软件领域发生了翻天覆地的变化。随着Docker逐渐普及,作为运行和加速云应用的操作系统(OS)虚拟化技术,容器已经催生了一个包含开源容...

    CSDN技术头条
  • sql必知必会3

    将之前学习的数据库知识在整理下,主要是看的**《SQL必知必会》**。这本书不愧是经典,入门数据库真的完全足够啦!

    皮大大
  • 总要先爬出坑的JEE架构

    说到JEE,做web项目的朋友其实都有所了解,它将企业级软件架构分为三个层级,web层、业务逻辑层和数据存储层。

    Java猫说
  • logstash_output_kafka:Mysql同步Kafka深入详解

    实际业务场景中,会遇到基础数据存在Mysql中,实时写入数据量比较大的情景。迁移至kafka是一种比较好的业务选型方案。

    铭毅天下
  • IoC容器系列的设计与实现:BeanFactory和ApplicationContext2 Spring IoC容器的设计

    JavaEdge
  • 考试试题计算选择题的答案

    微醺
  • 架构设计之微服务注册中心选型

    ZooKeeper、Consul、Eureka和新生的Nacos 都实现了注册中心的功能。那么从哪些方面进行对比,进而选型呢?

    黄泽杰

扫码关注云+社区

领取腾讯云代金券