新しいDagger2APIと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
のようなクラスがいくつかありますが、それらを機能させる方法がわかりません。
これは私がこれまでに行ったことです:
マニフェストに追加したApplicationクラス:
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
を生成しないことです。何が恋しいですか?
詳細情報が必要ですが、この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
}
また、build.gradleのannotationProcessorの代わりにkaptを使用します。
apply plugin: 'kotlin-kapt'
...
kapt 'com.google.dagger:dagger-compiler:2.15'
kapt 'com.google.dagger:dagger-Android-processor:2.15'