Jus*_*ing 1 android dependency-injection dagger-hilt
我正在学习改造拦截器,出于工作目的,我使用 dagger-hilt 将依赖项注入到片段等。我编写了一个自定义拦截器来检查连接错误,我试图将其添加到Retrofit.Builder():
@Provides
@Singleton
fun provideApi(): StoreApi {
return Retrofit.Builder()
.baseUrl(Constants.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava3CallAdapterFactory.create())
.build()
.create(StoreApi::class.java)
}
Run Code Online (Sandbox Code Playgroud)
但是,我不知道如何通过:
val okHttpClient = OkHttpClient()
.newBuilder()
.addInterceptor(ConnectivityInterceptor)
.build()
Run Code Online (Sandbox Code Playgroud)
作为改造构建器的 .client() (即使使用匕首柄),有什么想法吗?
您可以设置一个类似这样的模块,其中您将所有依赖项需求作为函数提供,并将它们暴露给 dagger,@Provides然后让 dagger 将依赖项提供为函数参数来构建依赖关系图:
@Module class ApiModule {
@Provides
@Singleton
internal fun provideApi(retrofit: Retrofit): StoreApi {
return retrofit
.create(StoreApi::class.java)
}
@Provides
@Singleton
internal fun retrofit(client: OkHttpClient): Retrofit =
Retrofit.Builder()
.client(client)
.baseUrl(Constants.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava3CallAdapterFactory.create())
.build()
@Provides
@Singleton
internal fun client(connectivityInterceptor: ConnectivityInterceptor): OkHttpClient =
OkHttpClient.Builder()
.addInterceptor(connectivityInterceptor)
.build()
@Provides
@Singleton
internal fun interceptor(): ConnectivityInterceptor = ConnectivityInterceptor()
}
Run Code Online (Sandbox Code Playgroud)
这是一个基于所提供代码的简单示例。
| 归档时间: |
|
| 查看次数: |
1728 次 |
| 最近记录: |