2017-12-27 299 views
0

我有2次注射同一類的,我用它們來創建2個改造API客戶端:命名注射不工作

改造實例:

@Provides 
@Singleton 
@Named(NO_REAUTH_RETROFIT) 
fun provideNoAuthRetrofit(moshi: Moshi, okHttpClientBuilder: OkHttpClient.Builder): Retrofit { 
    return Retrofit.Builder() 
      .addConverterFactory(MoshiConverterFactory.create(moshi)) 
      .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) 
      .baseUrl(Constants.apiUrlLive) 
      .client(okHttpClientBuilder.build()) 
      .build() 
} 

@Provides 
@Singleton 
@Named(REAUTH_RETROFIT) 
fun provideAuthRetrofit(moshi: Moshi, okHttpClientBuilder: OkHttpClient.Builder, interceptor: NetworkInterceptor): Retrofit { 
    return Retrofit.Builder() 
      .addConverterFactory(MoshiConverterFactory.create(moshi)) 
      .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) 
      .baseUrl(Constants.apiUrlLive) 
      .client(okHttpClientBuilder.addInterceptor(interceptor).build()) 
      .build() 
} 

OkHttp:

@Singleton 
@Provides 
fun provideOkHttpClientBuilder(context: Context, cache: Cache): OkHttpClient.Builder { 
    Stetho.initializeWithDefaults(context) 
    val httpLoggingInterceptor = HttpLoggingInterceptor() 
    httpLoggingInterceptor.level = HttpLoggingInterceptor.Level.BODY 
    val chuckInterceptor = ChuckInterceptor(context).showNotification(true) 
    return OkHttpClient.Builder() 
      .addInterceptor(chuckInterceptor) 
      .addInterceptor(httpLoggingInterceptor) 
      .addNetworkInterceptor(StethoInterceptor()) 
      .cache(cache) 
} 

API實例:

@Provides 
@Singleton 
fun provideCartApi(@Named(REAUTH_RETROFIT) retrofit: Retrofit): CartApi { 
    return retrofit.create(CartApi::class.java) 
} 

@Provides 
@Singleton 
fun provideAuthApi(@Named(NO_REAUTH_RETROFIT) retrofit: Retrofit): AuthApi { 
    return retrofit.create(AuthApi::class.java) 
} 

這兩個API函數都接收NetworkInterceptor的改進實例。我試圖切換2個改造實例的@Named值,但沒有任何改變。只有當我從兩個翻新實例中刪除NetworkInterceptor時,才創建API實例,但不包含NetworkInterceptor

我還檢查字節碼,但@Named註釋存在有

+0

你能告訴OkHttpClient.Builder'如何'是正在提供? – azizbekian

+0

@azizbekian更新了這個問題。 – Sourabh

回答

0

它看起來像這樣的問題: https://github.com/google/dagger/issues/848

使用@field:命名

+0

'@field:Named(「...」)用於一個類字段,我使用了named注入作爲一個函數參數,它在你鏈接的GitHub問題中按照預期工作。 – Sourabh

+0

對不起,我誤解了你的問題。你介意給出關於組件代碼的更多細節嗎? – Mumi

+0

爲什麼你需要這個組件,它沒有什麼能夠進一步描述問題。此外,我在其他地方也使用了類似的注入方式,並且它工作正常 – Sourabh