2017-09-13 21 views
4

我最近开始使用kotlin使用dagger-2。不幸的是我已经ecnountered一个问题sumbcomponants和我有很难理解为什么我得到这个错误的gradle:组件(unscoped)可能无法引用作用域绑定

...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: @Module 类NetModule(私人VAL BASE_URL:字符串){

@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) 
} 

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

+1

你有相同的范围内添加到组件,试试:'@辛格尔顿@Subcomponent(模块= arrayOf(NetModule ::类))' –

+0

我没有帮助因为它不应该:https://stackoverflow.com/questions/37797519/how-to-make-subcomponent-singleton-in-dagger-2 – Kremik13

+1

[使用组件依赖项时单例问题]的可能重复(https:/ /stackoverflow.com/questions/28170292/problems-with-singletons-when-using-component-dependencies) –

回答

3

把@Singleton与您的组件

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