basic

<aside> 🏆

什么是依赖项注入?

类通常需要引用其他类。例如,Car 类可能需要引用 Engine 类。这些必需的类称为依赖项,在此示例中,Car 类必须拥有 Engine 类的一个实例才能运行。

类可通过以下三种方式获取所需的对象:

  1. 类构造其所需的依赖项。在上面的示例中,Car 将创建并初始化自己的 Engine 实例。
  2. 从其他地方抓取。某些 Android API(如 Context getter 和 getSystemService())便是如此获取对象的。
  3. 以参数形式提供。应用可以在构造类时提供这些依赖项,或者将这些依赖项传入需要各个依赖项的函数。在上面的示例中,Car 构造函数将接收 Engine 作为参数。

第三种方式就是依赖项注入!使用这种方法,您可以获取并提供类的依赖项,而不必让类实例自行获取。

</aside>

Android 中的依赖项注入  |  Android 开发者  |  Android Developers

构造函数注入

class Car {

    private val engine = Engine()

    fun start() {
        engine.start()
    }
}

fun main(args: Array
class Car(
	private val engine: Engine
	) {
    fun start() {
        engine.start()
    }
}

fun main(args: Array

字段注入(或 setter 注入)

依赖项将在创建类后实例化,而非如“构造函数注入”借助构造函数同时构造:

自动依赖项注入

  1. 基于反射的解决方案,可在运行时连接依赖项。
  2. 静态解决方案,可在编译时生成连接依赖项的代码。

要解决的问题是:

  1. 样板代码
  2. 维护依赖项生命周期的容器(因为不能保证依赖项在需要时已经准备好,即使注入在创建类后)

Android - Jetpack Compose : Hilt

“控制反转”原则

Inversion of control