Dagger 2 с приложением Instant - PullRequest
0 голосов
/ 07 июня 2018

Я работаю над мгновенным приложением в течение нескольких дней.Я еще не скомпилировал его из-за проблемы с Кинжалом.

Проект разделен на base, export, preview как функции.

In export module

@ExportScope
@Component(
        modules = [DrawExportModule::class],
        dependencies = [AppComponent::class])
interface DrawExportComponent: AndroidInjector<LiveDrawingExportActivity> {

    @Component.Builder
    abstract class Builder : AndroidInjector.Builder<LiveDrawingExportActivity>(){
        abstract fun plus(component: AppComponent): Builder
    }
}

AppComponent.kt

@Singleton
@Component(modules = [
    AndroidInjectionModule::class,
    AppModule::class,
    ActivityBindingModule::class,
    ServiceBindingModule::class])
interface AppComponent {

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

        fun build(): AppComponent
    }

    fun inject(app: LiveMessageApplication)
}

AppModule.kt

   @Module(includes = [(DataModule::class)])
   class AppModule {
   @Singleton
   @Provides
   fun provideStateManager(): StateManager {
        return StateManager.getInstance()
   }
}

Журнал ошибок компиляции

    /Users/*/features/export/build/tmp/kapt3/stubs/debug/*/ui/draw/di/DrawExportComponent.java:8: 
error: [Dagger/MissingBinding] [dagger.android.AndroidInjector.inject(T)] *.ui.StateManager cannot be provided without an @Inject constructor or an @Provides-annotated method.
    public abstract interface DrawExportComponent extends dagger.android.AndroidInjector<com.ctech.livemessage.ui.draw.LiveDrawingExportActivity> {
                    ^
          *.ui.StateManager is injected at
              *.LiveDrawingExportActivity.stateManager
          *.LiveDrawingExportActivity is injected at
              dagger.android.AndroidInjector.inject(T)

Мне кажется компонент зависимостине работает в этом случае.Я понятия не имею, как двигаться вперед.

Дополнительная информация base / build.gradle

apply plugin: 'com.android.feature'
apply plugin: 'io.fabric'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android-extensions'

android {

    compileSdkVersion deps.build.compileSdkVersion

    baseFeature = true

    defaultConfig {
        minSdkVersion deps.build.minSdkVersion
        targetSdkVersion deps.build.targetSdkVersion

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    buildTypes {

        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.debug
        }
    }

    compileOptions {
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }

}

dependencies {

    application project(":installed")
    feature project(":features:export")
    feature project(":features:preview")
}

export / build.gradle

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

android {

    compileSdkVersion deps.build.compileSdkVersion

    defaultConfig {
        minSdkVersion deps.build.minSdkVersion
        targetSdkVersion deps.build.targetSdkVersion
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    buildTypes {

        release {
            debuggable true
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), '../../proguard.pro'
            signingConfig signingConfigs.debug
        }

    }

    sourceSets {
        main {
            jniLibs.srcDirs 'libs'
        }
    }

    compileOptions {
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }

}

dependencies {

    implementation project(':features:base')

    kapt deps.dagger.compiler
    kapt deps.dagger.androidCompiler

}

1 Ответ

0 голосов
/ 07 июня 2018

Проблема в том, что DrawExportComponent не видит StateManager, поскольку последний является частью AppComponent.

В отличие от подкомпонентов, с зависимостями компонентов, зависимые компоненты не получают доступ ко всемродительского компонента.Вы должны явно указать, что является общим, добавив:

fun stateManager(): StateManager

к вашей AppComponent.

Дополнительная информация в официальной документации

...