<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