Dagger Hilt Android 的编译时错误:okhttp3.Interceptor 无法在没有 @Provides-annotated 方法的情况下提供
Compile time error with Dagger Hilt Android: okhttp3.Interceptor cannot be provided without an @Provides-annotated method
我正在学习匕首刀柄,但没有学习 dagger2,并且遇到了一个我找不到解决方案的错误。
我有两个方法 provideLoggingInterceptor()
和 provideHeaderInterceptor()
,其中 returns 是同一个 Interceptor
对象,所以我添加了一个 @Named()
限定符来标识提供者。 provideOkHttpClient()
方法同时需要 Interceptor
但我收到编译时错误
error: [Dagger/MissingBinding] okhttp3.Interceptor cannot be provided
without an @Provides-annotated method.
现在我很困惑,因为如果方法 provideLoggingInterceptor()
和 provideHeaderInterceptor()
都用 @Provides
注释进行注释,那么为什么我会收到错误消息,我的方法之一没有 @Provides
注解.
@InstallIn(ApplicationComponent::class)
@Module
class NetworkModule {
val TIMEOUT = 10
@Singleton
@Provides
@Named("logging")
fun provideLoggingInterceptor(): Interceptor =
HttpLoggingInterceptor().apply {
level = if (BuildConfig.DEBUG) HttpLoggingInterceptor.Level.BODY
else HttpLoggingInterceptor.Level.NONE
}
@Singleton
@Provides
@Named("header")
fun provideHeaderInterceptor(): Interceptor =
Interceptor { chain ->
val request = chain.request()
val newUrl = request.url.newBuilder()
.addQueryParameter("api_key", BuildConfig.TMBD_API_KEY)
.build()
val newRequest = request.newBuilder()
.url(newUrl)
.method(request.method, request.body)
.build()
chain.proceed(newRequest)
}
@Singleton
@Provides
fun provideOkHttpClient(
logging: Interceptor,
header: Interceptor
): OkHttpClient =
OkHttpClient.Builder()
.connectTimeout(TIMEOUT.toLong(), TimeUnit.SECONDS)
.readTimeout(TIMEOUT.toLong(), TimeUnit.SECONDS)
.addInterceptor(header)
.addInterceptor(logging)
.addNetworkInterceptor(StethoInterceptor())
.build()
}
您还必须对参数使用 Named
注释
fun provideOkHttpClient(
@Named("logging") logging: Interceptor,
@Named("header") header: Interceptor
): OkHttpClient = ...
我正在学习匕首刀柄,但没有学习 dagger2,并且遇到了一个我找不到解决方案的错误。
我有两个方法 provideLoggingInterceptor()
和 provideHeaderInterceptor()
,其中 returns 是同一个 Interceptor
对象,所以我添加了一个 @Named()
限定符来标识提供者。 provideOkHttpClient()
方法同时需要 Interceptor
但我收到编译时错误
error: [Dagger/MissingBinding] okhttp3.Interceptor cannot be provided without an @Provides-annotated method.
现在我很困惑,因为如果方法 provideLoggingInterceptor()
和 provideHeaderInterceptor()
都用 @Provides
注释进行注释,那么为什么我会收到错误消息,我的方法之一没有 @Provides
注解.
@InstallIn(ApplicationComponent::class)
@Module
class NetworkModule {
val TIMEOUT = 10
@Singleton
@Provides
@Named("logging")
fun provideLoggingInterceptor(): Interceptor =
HttpLoggingInterceptor().apply {
level = if (BuildConfig.DEBUG) HttpLoggingInterceptor.Level.BODY
else HttpLoggingInterceptor.Level.NONE
}
@Singleton
@Provides
@Named("header")
fun provideHeaderInterceptor(): Interceptor =
Interceptor { chain ->
val request = chain.request()
val newUrl = request.url.newBuilder()
.addQueryParameter("api_key", BuildConfig.TMBD_API_KEY)
.build()
val newRequest = request.newBuilder()
.url(newUrl)
.method(request.method, request.body)
.build()
chain.proceed(newRequest)
}
@Singleton
@Provides
fun provideOkHttpClient(
logging: Interceptor,
header: Interceptor
): OkHttpClient =
OkHttpClient.Builder()
.connectTimeout(TIMEOUT.toLong(), TimeUnit.SECONDS)
.readTimeout(TIMEOUT.toLong(), TimeUnit.SECONDS)
.addInterceptor(header)
.addInterceptor(logging)
.addNetworkInterceptor(StethoInterceptor())
.build()
}
您还必须对参数使用 Named
注释
fun provideOkHttpClient(
@Named("logging") logging: Interceptor,
@Named("header") header: Interceptor
): OkHttpClient = ...