Android 中的依赖项注入
依赖项注入 (DI) 是一种广泛用于编程的技术,非常适用于 Android 开发。遵循 DI 的原则可以为良好的应用架构奠定基础。
实现依赖项注入可为您带来以下优势:
重用代码
易于重构
易于测试
什么是依赖项注入?
类通常需要引用其他类。例如,Car 类可能需要引用 Engine 类。这些必需类称为依赖项,在此示例中,Car 类依赖于拥有 Engine 类的一个实例才能运行。
类可通过以下三种方式获取所需的对象:
1.类构造其所需的依赖项。在以上示例中,Car 将创建并初始化自己的 Engine 实例。
2.从其他地方抓取。某些 Android API(如 Context getter 和 getSystemService())的工作原理便是如此。
3.以参数形式提供。应用可以在构造类时提供这些依赖项,或者将这些依赖项传入需要各个依赖项的函数。在以上示例中,Car 构造函数将接收 Engine 作为参数。
第三种方式就是依赖项注入!使用这种方法,您可以获取并提供类的依赖项,而不必让类实例自行获取。
Hilt 是推荐用于在 Android 中实现依赖项注入的 Jetpack 库。Hilt 通过为项目中的每个 Android 类提供容器并自动为您管理其生命周期,定义了一种在应用中执行 DI 的标准方法。
Hilt在热门DI库Dagger 的基础上构建而成,因而能够受益于 Dagger 提供的编译时正确性、运行时性能、可伸缩性和 Android Studio 支持。
依赖项注入会为您的应用提供以下优势:
重用类以及分离依赖项:更容易换掉依赖项的实现。由于控制反转,代码重用得以改进,并且类不再控制其依赖项的创建方式,而是支持任何配置。
易于重构:依赖项成为 API Surface 的可验证部分,因此可以在创建对象时或编译时进行检查,而不是作为实现详情隐藏。
易于测试:类不管理其依赖项,因此在测试时,您可以传入不同的实现以测试所有不同用例。