Table of Contents generated with DocToc
DI框架通常提供两种功能:
- 一种“提供”新组件的机制。 这将告诉DI框架您需要构建自己的其他组件(您的依赖关系)以及在拥有这些组件后如何构建自己。
- 一种“检索”构建组件的机制。 DI框架通常基于您所讲述的“提供者”构建一个图并确定如何构建您的对象
DI容器底层最基本的设计思路就是基于工厂模式的。DI容器相当于一个大的工厂类,负责在程序启动的时候,根据配置(要创建哪些类对象,每个类对象的创建需要依赖哪些其他类对象)事先创建好对象。 当应用程序需要使用某个类对象的时候,直接从容器中获取即可。正是因为它持有一堆对象,所以这个框架才被称为“容器”。
DI容器的核心功能一般有三个:配置解析、对象创建和对象生命周期管理
常用的主要是 google/wire, facebook/inject, uber/dig, uber/fx 等。
大体上看,分为两个派系:
- 代码生成 codegen
- 基于反射 reflect
dig 和 wire 对比
- dig 通过反射识别依赖关系,wire 是编译前计算依赖关系
- dig 只能在代码运行时,才能知道哪个依赖不对,比如构造函数返回类型的是结构体指针,但是其他依赖的是interface,这样的错误只能在运行时发现,而wire可以在编译的时候就发现。