Ошибка Dagger 2 с отсутствующим провайдером kotlin - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь исправить ошибку при использовании нового androidx с Dagger и kotlin. Работает нормально при использовании на Java написано. Но когда я переключаю его на kotlin, Я получил сообщение об ошибке: ошибка: java.util.Map, javax.inject.Provider >> не может быть предоставлен без аннотированного метода @ Provides. Я использую Android Studio 3.2.1 Вот мой код:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'




implementation "com.google.dagger:dagger:2.13"
implementation "com.google.dagger:dagger-android:2.13"
implementation "com.google.dagger:dagger-android-support:2.13"
kapt "com.google.dagger:dagger-compiler:2.13"
kapt "com.google.dagger:dagger-android-processor:2.13"

Мой AppComponent:

@Singleton
@Component(modules = [AppModule::class, BuildersModule::class, NetworkModule::class])
interface AppComponent {
    @Component.Builder
    interface Builder {
        @BindsInstance
        fun application(app: BaseApp): Builder

        fun build(): AppComponent

    }

    fun inject(app: BaseApp)
}

И мой AppModule:

@Module
class AppModule {

    @Provides
    @Singleton
    internal fun provideDataManager(): DataManager {
        return DataManager()
    }

    @Provides
    fun provideContext(app: BaseApp) : Context {
        return app.applicationContext
    }

    @Provides
    fun provideRemoteData (remoteRepository: RemoteRepository): RemoteContract {
        return remoteRepository
    }
}

Итак, мой DaggerAppComponent не генерируется из-за этого кода. Я даже попробовал версию 2.19, но получил некоторые другие ошибки. Я читал, что они пытаются это исправить. Буду признателен, если есть какой-то способ или предложение.

О, еще одна вещь. На Java написано, что у меня был также AndroidSupportInjectionModule в AppComponent, и он работал нормально:

@Singleton
@Component(modules = {AndroidSupportInjectionModule.class, AppModule.class, BuildersModule.class, NetworkModule.class})
public interface AppComponent {
    @Component.Builder
    interface Builder {
        @BindsInstance
        Builder application(BaseApp app);
        AppComponent build();

    }

    void inject(BaseApp app);
}

Если я добавлю это в версии Kotlin, как показано ниже, я больше не получаю ошибку выше, а вместо этого ошибка при построении: Неразрешенная ссылка: DaggerAppComponent

@Singleton
@Component(modules = [
    AndroidSupportInjectionModule::class, 
    AppModule::class,
    BuildersModule::class,
    NetworkModule::class
])
interface AppComponent {
    @Component.Builder
    interface Builder {
        @BindsInstance
        fun application(app: BaseApp): Builder
        fun build(): AppComponent
    }
    fun inject(app: BaseApp)
}

1 Ответ

0 голосов
/ 08 ноября 2018

Попробуйте добавить InjectionModules в ваш AppComponent.kt

@Singleton
@Component(modules = [
AppModule::class,
BuildersModule::class,
NetworkModule::class
AndroidInjectionModule::class,
AndroidSupportInjectionModule::class
])
interface ApplicationComponent {
....
...