返回

Dagger 2 中的 Android 注入:深入浅出(二)

Android

[译] 在上一篇博客中,我尝试解释 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 可以提高代码的可测试性、可维护性和可读性。