android - 组件(无作用域)可能不引用作用域绑定(bind)

标签 android kotlin dagger-2

我最近开始在 kotlin 中使用 dagger-2。不幸的是,我发现了 sumbcomponants 的问题,我无法理解为什么会出现这个 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(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)
}

网络组件:

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

有谁知道可能是什么问题?

最佳答案

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

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

关于android - 组件(无作用域)可能不引用作用域绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46195553/

相关文章:

android - Gradle-用于发布和调试的不同配置不起作用

java - 按钮在 Android 警报 View 中不起作用?

java - 一个对话框中的 Android 日期时间选择器

android - 将 ViewModelProvider.Factory 的提供者注入(inject) esspresso 测试

Android Dagger 2 编译错误

android - 如何在 Android 应用程序中集成 Paypal 捐赠?

android - 内容提供商或资源、 Activity 、服务合作

android - 如何为小米、红米、三星、华为等创建Android虚拟设备AVD

android - JSON 数据解析 - 如何?

android - Kotlin 延迟初始化与 Dagger 延迟注入(inject)