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 = ...