Android 组件(非作用域)不能引用作用域绑定

Android 组件(非作用域)不能引用作用域绑定,android,kotlin,dagger-2,Android,Kotlin,Dagger 2,我最近开始和kotlin一起使用dagger-2。不幸的是,我发现了Sumbcomponents的一个问题,我很难理解为什么会出现这个gradle错误: ...NetComponent (unscoped) may not reference scoped bindings: @dagger.Subcomponent(modules = {com.example.kremik.cryptodroid.di.module.NetModule.class}) @Singleton @Provide

我最近开始和kotlin一起使用dagger-2。不幸的是,我发现了Sumbcomponents的一个问题,我很难理解为什么会出现这个gradle错误:

...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)
模块:应用程序

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(专用val BASE_URL:String){

网络组件:

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

有人知道会出现什么问题吗?

将@Singleton与您的组件放在一起

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

您必须向组件添加相同的作用域,请尝试:
@Singleton@Subcomponent(modules=arrayOf(NetModule::class))
我没有帮助,因为它不应该:子组件中可能重复的模块应具有与父组件相同的另一个作用域。尝试为您的模块使用自定义作用域错误消息会准确地告诉您错误所在。您的子组件没有作用域。它不能引用作用域(
@Singleton
)绑定。解决方案是为你的子组件定义一个新的作用域。这对我很有帮助,但你能解释一下为什么在这里添加单例注释很重要吗?谢谢!不过我有一个很狡猾的错误:确保它是Javax的Javax.inject.singleton!我不小心导入了Guice的com.google.inject.singleton,玩得很不开心。。。
@Singleton
@Subcomponent(modules = arrayOf(NetModule::class))
interface NetComponent {
fun inject(service: CurrencyDownloaderService)
}