Dagger 2 中的 Android 注入:深入浅出(二)
2023-11-29 05:14:08
[译] 在上一篇博客中,我尝试解释 Dagger-Android 注入。我收到了一些评论,一些人说它太复杂了,没有必要为了新特性而进行升级。我猜到了这种情况会发生,但我仍然认为有必要解释 Dagger 在幕后所做的事情。在阅读这篇博客之前,我强烈建议先阅读第一篇博客。在本文中,我将使用 @Component
和 @Provides
注解,而不是 @AndroidInjection
和 @Inject
注解。
Dagger 是 Android 中流行的依赖注入框架。它通过提供一种声明性的方式管理对象创建,从而简化了应用程序的开发。
组件(Components)
组件是 Dagger 的核心概念。它们是用于创建和管理对象实例的容器。组件使用 @Component
注解声明,并指定其依赖项和其他要创建的对象。
要创建一个组件,可以使用 DaggerComponent.create()
方法。此方法将返回一个新创建的组件实例,该实例可以用于检索要注入的对象。
例如,以下组件使用 @Component
注解声明,并指定 MyModule
作为其依赖项:
@Component(modules = [MyModule::class])
interface MyComponent {
fun inject(myClass: MyClass)
}
提供者(Providers)
提供者是 Dagger 用于创建对象的方法。它们使用 @Provides
注解声明,并指定要创建的对象的类型和创建方式。
要创建一个提供者,可以在模块类中使用 @Provides
注解,如下所示:
@Module
class MyModule {
@Provides
fun provideMyClass(): MyClass {
return MyClass()
}
}
使用 Dagger
要使用 Dagger,需要将组件类添加到 AndroidManifest.xml
文件中:
<application>
<component
android:name=".MyComponent"
android:exported="false" />
</application>
然后,可以在 Activity 或 Fragment 中使用 @Inject
注解将对象注入到类中:
class MyActivity : AppCompatActivity() {
@Inject
lateinit var myClass: MyClass
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
DaggerMyComponent.create().inject(this)
}
}
优点
Dagger 有许多优点,包括:
- 提高代码可测试性: 通过将对象创建与依赖关系分离,可以更轻松地测试应用程序。
- 简化代码: 通过将对象创建逻辑移出类,可以使代码更简洁易读。
- 提高可维护性: 通过将对象创建集中到一个位置,可以更容易地更改或更新对象。
总结
Dagger 是 Android 中流行的依赖注入框架。通过提供一种声明性的方式管理对象创建,它简化了应用程序的开发。使用 Dagger 可以提高代码的可测试性、可维护性和可读性。