<aside> 🏆
类通常需要引用其他类。例如,Car
类可能需要引用 Engine
类。这些必需的类称为依赖项,在此示例中,Car
类必须拥有 Engine
类的一个实例才能运行。
类可通过以下三种方式获取所需的对象:
Car
将创建并初始化自己的 Engine
实例。Context
getter 和 getSystemService()
)便是如此获取对象的。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
Car
。您可以将 Engine
的不同实现传入 Car
。例如,您可以定义一个想让 Car
使用的新的 Engine
子类并将其命名为 ElectricEngine
。如果您使用 DI,只需传入更新后的 ElectricEngine
子类的实例,Car
仍可正常使用,无需任何进一步更改。Car
。您可以传入测试替身以测试不同场景。例如,您可以创建一个名为 FakeEngine
的 Engine
测试替身,并针对不同的测试进行配置。依赖项将在创建类后实例化,而非如“构造函数注入”借助构造函数同时构造:
某些 Android 框架类(如 activity 和 fragment)由系统实例化,因此无法进行构造函数注入。
class Car {
lateinit var engine: Engine
fun start() {
engine.start()
}
}
fun main(args: Array
要解决的问题是:
Android - Jetpack Compose : Hilt