Skip to content

Latest commit

 

History

History
41 lines (27 loc) · 2.25 KB

dependency_injection.md

File metadata and controls

41 lines (27 loc) · 2.25 KB

Table of Contents generated with DocToc

DI 依赖注入容器(Dependency Injection Container)

DI框架通常提供两种功能:

  1. 一种“提供”新组件的机制。 这将告诉DI框架您需要构建自己的其他组件(您的依赖关系)以及在拥有这些组件后如何构建自己。
  2. 一种“检索”构建组件的机制。 DI框架通常基于您所讲述的“提供者”构建一个图并确定如何构建您的对象

工厂模式和DI容器的区别

DI容器底层最基本的设计思路就是基于工厂模式的。DI容器相当于一个大的工厂类,负责在程序启动的时候,根据配置(要创建哪些类对象,每个类对象的创建需要依赖哪些其他类对象)事先创建好对象。 当应用程序需要使用某个类对象的时候,直接从容器中获取即可。正是因为它持有一堆对象,所以这个框架才被称为“容器”。

DI容器的核心功能

DI容器的核心功能一般有三个:配置解析、对象创建和对象生命周期管理

第三方实现

常用的主要是 google/wire, facebook/inject, uber/dig, uber/fx 等。

大体上看,分为两个派系:

  • 代码生成 codegen
  • 基于反射 reflect

dig 和 wire 对比

  1. dig 通过反射识别依赖关系,wire 是编译前计算依赖关系
  2. dig 只能在代码运行时,才能知道哪个依赖不对,比如构造函数返回类型的是结构体指针,但是其他依赖的是interface,这样的错误只能在运行时发现,而wire可以在编译的时候就发现。