简体   繁体   中英

Dagger build error

I've got two objects which I inject with dagger2 without any problems. When I add third one (the same way like two before), project does not rebuild and gives errors, that points into first two (nothing here about added third one):

error: com.google.firebase.database.DatabaseReference cannot be provided without an @Inject constructor or from an @Provides- or @Produces-annotated method.
com.google.firebase.database.DatabaseReference is injected at
com.hotmail.at.jablonskimichal.dni.wolne.od.handlu.ui.splash.SplashPresenter.freeDaysCloudReference
com.hotmail.at.jablonskimichal.dni.wolne.od.handlu.ui.splash.SplashPresenter is injected at
com.hotmail.at.jablonskimichal.dni.wolne.od.handlu.providers.components.MainPresenterComponent.inject(destination)

Every three modules and components are implemented in the same way. Of course when I delete added third one, projects compiles easily.

Module which messes project build:

@Module
public class MainPresenterModule {

    private final MainPresenter presenter;

    public MainPresenterModule(MainPresenter presenter) {
        this.presenter = presenter;
    }

    @Singleton
    @Provides
    MainPresenter provideMainPresenter() {
        return presenter;
    }

}

Component:

@Singleton
@Component(modules = {MainPresenterModule.class})
public interface MainPresenterComponent {
    void inject(SplashPresenter destination);
}

Maybe useful: I am using those libraries for DI with dagger2:

    implementation 'com.google.dagger:dagger-android:2.11'
    implementation 'com.google.dagger:dagger-android-support:2.11'
    annotationProcessor 'com.google.dagger:dagger-android-processor:2.11'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.11'

with newest android studio (3.1.1) and gradle (3.1.1) on mac osx. Of course I've tried invalidating cache and restarts, cleans etc. I've checked imports and all of them are the same.

Edit: When I remove usage of injection

    @Inject
    DatabaseReference shopsCloudReference;

    public MainPresenter(MainController controller) {
        super(controller);
        Core.injectShopsComponent().into(this);
    }

And

    @Inject
    DatabaseReference freeDaysCloudReference;

    public SplashPresenter(SplashController controller) {
        super(controller);
        Core.injectFreeDaysComponent().into(this);
    }

project compiles, but it is not what I wanted.

EDIT There's lot of answers that I didn't add firebase libs in gradle. My full gradle:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.hotmail.at.jablonskimichal.dni.wolne.od.handlu"
        minSdkVersion 21
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

allprojects {
    repositories {
        mavenCentral()
        google()
        maven { url "https://jitpack.io" }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    //tests
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'

    //support
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support:design:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.0'

    //images loading
    implementation 'com.github.bumptech.glide:glide:4.4.0'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.4.0'

    //network
    implementation 'com.squareup.okhttp3:okhttp:3.9.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.9.0'
    implementation 'com.squareup.retrofit2:retrofit:2.2.0'

    //json parsing
    implementation 'com.squareup.retrofit2:converter-gson:2.2.0'
    implementation 'com.google.code.gson:gson:2.8.0'

    //for view bindings
    implementation 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

    //rxjava
    def rxVersion = '2.0.2'
    implementation "io.reactivex.rxjava2:rxandroid:$rxVersion"
    implementation "io.reactivex.rxjava2:rxjava:$rxVersion"
    implementation 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'

    //dagger
    implementation 'com.google.dagger:dagger-android:2.11'
    implementation 'com.google.dagger:dagger-android-support:2.11'
    annotationProcessor 'com.google.dagger:dagger-android-processor:2.11'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.11'

    //google
    implementation 'com.google.android.gms:play-services-maps:15.0.0'
    implementation 'com.google.firebase:firebase-database:15.0.0'
    implementation 'com.google.firebase:firebase-core:15.0.0'

    //datetime
    implementation group: 'joda-time', name: 'joda-time', version: '2.9.9'

    //transitions
    implementation "com.andkulikov:transitionseverywhere:1.7.9"

    //kotlin
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}

apply plugin: 'com.google.gms.google-services'

Well, you wrote :

@Component(modules = {MainPresenterComponent.class})

It should be :

@Component(modules = {MainPresenterModule.class})

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM