如何使用DaggerApplication和DaggerAppCompatActivity

Rez*_*eli 5 android dagger dagger-2

我正在努力了解新的Dagger2 API和对Android的支持。我正在使用Dagger2版本2.15:

implementation 'com.google.dagger:dagger:2.15'
implementation 'com.google.dagger:dagger-android:2.15'
implementation 'com.google.dagger:dagger-android-support:2.15'
annotationProcessor 'com.google.dagger:dagger-compiler:2.15'
annotationProcessor 'com.google.dagger:dagger-android-processor:2.15'
Run Code Online (Sandbox Code Playgroud)

现在,在此版本中有一些类似的类DaggerApplicationDaggerAppCompatActivity但是我不确定如何使它们工作。

到目前为止,这是我所做的:

我在清单中添加的Application类:

class BaseApplication : DaggerApplication() {
    override fun applicationInjector(): AndroidInjector<out DaggerApplication> {
        return DaggerAppComponent.builder().create(this)
    }
}
Run Code Online (Sandbox Code Playgroud)

我的AppComponent:

@Singleton
@Component(modules = [
    AndroidSupportInjectionModule::class
])
interface AppComponent : AndroidInjector<BaseApplication> {
    @Component.Builder
    abstract class Builder : AndroidInjector.Builder<BaseApplication>()
}
Run Code Online (Sandbox Code Playgroud)

我在所有创建的其他活动中扩展的基本Activity类:

abstract class BaseActivity : DaggerAppCompatActivity() {
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我尝试制作或构建项目时,它会失败,而Dagger不会DaggerAppComponent为我生成。我想念什么?

Sam*_*net 11

需要更多信息,请尝试使用此AppComponent

@Singleton
@Component(modules = [AndroidSupportInjectionModule::class])
interface ApplicationComponent : AndroidInjector<YourApplication> {
    override fun inject(application: YourApplication)

    @Component.Builder
    interface Builder {
        @BindsInstance
        fun application(application: YourApplication): Builder

        fun build(): ApplicationComponent
    }
}
Run Code Online (Sandbox Code Playgroud)

并从您的应用程序类

class YourApplication : DaggerApplication() {
    private val applicationInjector = DaggerApplicationComponent.builder()
        .application(this)
        .build()

    override fun applicationInjector() = applicationInjector
}
Run Code Online (Sandbox Code Playgroud)

也可以使用kapt代替build.gradle中的注解处理器:

apply plugin: 'kotlin-kapt'
...
kapt 'com.google.dagger:dagger-compiler:2.15'
kapt 'com.google.dagger:dagger-android-processor:2.15'
Run Code Online (Sandbox Code Playgroud)

  • 真是可恶..那是`kapt` ...非常感谢 (2认同)