A component (non-cloud) may not reference bindings with a binding

I recently started using dagger-2 with kotlin. Unfortunately, I solved the problem with sumbcomponants, and I had problems understanding why I get this gradle error:

...NetComponent (unscoped) may not reference scoped bindings: @dagger.Subcomponent(modules = {com.example.kremik.cryptodroid.di.module.NetModule.class}) @Singleton @Provides com.example.kremik.cryptodroid.data.remote.CMCService com.example.kremik.cryptodroid.di.module.NetModule.providesCMCService(retrofit2.Retrofit) @Singleton @Provides retrofit2.Retrofit com.example.kremik.cryptodroid.di.module.NetModule.providesRetrofit() @org.jetbrains.annotations.NotNull @Singleton @Provides com.example.kremik.cryptodroid.data.service.CurrencyDataPresenter com.example.kremik.cryptodroid.di.module.NetModule.providesCurrencyDataPresenter(com.example.kremik.cryptodroid.data.local.CurrenciesProvider, com.example.kremik.cryptodroid.ui.LivePrices.LivePricesPresenter) 

Module: Application

 apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' android { compileSdkVersion 26 buildToolsVersion "26.0.1" defaultConfig { applicationId "com.example.kremik.cryptodroid" minSdkVersion 19 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } configurations.all { resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9' } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } // dataBinding { // enabled = true // } kapt { generateStubs = true } } dependencies { (...) //Dagger2 implementation 'com.google.dagger:dagger:2.11' implementation 'com.google.dagger:dagger-android-support:2.11' implementation 'com.google.dagger:dagger-android-processor:2.11' kapt 'com.google.dagger:dagger-compiler:2.11' (...) } 

NetModule: @Module class NetModule (private val BASE_URL: String) {

 @Provides @Singleton fun providesCurrencyDataPresenter(provider: CurrenciesProvider, pricesPresenter: LivePricesPresenter) = CurrencyDataPresenter(provider, pricesPresenter) @Provides @Singleton fun providesRetrofit() = Retrofit.Builder() .baseUrl(BASE_URL) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .build() @Provides @Singleton fun providesCMCService(retrofit: Retrofit) = retrofit.create(CMCService::class.java) } 

NetComponent:

 @Subcomponent(modules = arrayOf(NetModule::class)) interface NetComponent { fun inject(service: CurrencyDownloaderService) } 

Does anyone know what the problem is?

+5
source share
1 answer

Put @Singleton with your component

 @Singleton @Subcomponent(modules = arrayOf(NetModule::class)) interface NetComponent { fun inject(service: CurrencyDownloaderService) } 
+4
source

Source: https://habr.com/ru/post/1271754/


All Articles