我试图了解新的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'
现在在这个版本中有一些类似DaggerApplication
和DaggerAppCompatActivity
的类,但我不确定如何让它们工作。
这是我到目前为止所做的:
我在清单中添加的我的应用程序类:
class BaseApplication : DaggerApplication() {
override fun applicationInjector(): AndroidInjector<out DaggerApplication> {
return DaggerAppComponent.builder().create(this)
}
}
我的AppComponent:
@Singleton
@Component(modules = [
AndroidSupportInjectionModule::class
])
interface AppComponent : AndroidInjector<BaseApplication> {
@Component.Builder
abstract class Builder : AndroidInjector.Builder<BaseApplication>()
}
我在我创建的任何其他活动中扩展的基本Activity类:
abstract class BaseActivity : DaggerAppCompatActivity() {
}
问题在于,当我尝试制作或构建项目时,它失败了,而Dagger并没有为我生成DaggerAppComponent
。
我错过了什么?
答案 0 :(得分:6)
需要更多信息,但请尝试此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
}
}
从您的应用程序类
class YourApplication : DaggerApplication() {
private val applicationInjector = DaggerApplicationComponent.builder()
.application(this)
.build()
override fun applicationInjector() = applicationInjector
}
也可以使用kapt而不是annotationProcessor 来自你的build.gradle:
apply plugin: 'kotlin-kapt'
...
kapt 'com.google.dagger:dagger-compiler:2.15'
kapt 'com.google.dagger:dagger-android-processor:2.15'