web-dev-qa-db-ja.com

DaggerApplicationおよびDaggerAppCompatActivityの操作方法

新しい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'

現在、このバージョンにはDaggerApplicationDaggerAppCompatActivityのようなクラスがいくつかありますが、それらを機能させる方法がわかりません。

これは私がこれまでに行ったことです:

マニフェストに追加した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を生成しないことです。何が恋しいですか?

6
Reza Bigdeli

詳細情報が必要ですが、この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'
16
Samuel Eminet