@Name注释exception

我正在用Kotlin Dagger 2@Named注解( Java使用相同的代码正常工作)

Error:[dagger.android.AndroidInjector.inject(T)] @javax.inject.Named("LOGGING_INTERCEPTOR") okhttp3.Interceptor cannot be provided without an @Provides-annotated method.

这是我的API模块代码的一部分:

  @Provides @Named(LOGGING_INTERCEPTOR) fun provideLoggingInterceptor() = HttpLoggingInterceptor().apply { level = HttpLoggingInterceptor.Level.BODY } @Provides @Named(CONNECTIVITY_INTERCEPTOR) fun provideConnectivityInterceptor(): Interceptor = ConnectivityInterceptor() @Singleton @Provides fun provideOkHttpClient( @Named(CONNECTIVITY_INTERCEPTOR) connectivityInterceptor: Interceptor, @Named(LOGGING_INTERCEPTOR) loggingInterceptor: Interceptor ): OkHttpClient = OkHttpClient.Builder() .connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS) .writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS) .readTimeout(READ_TIMEOUT, TimeUnit.SECONDS) .addInterceptor(connectivityInterceptor) .apply { if (BuildConfig.DEBUG) addInterceptor(loggingInterceptor) } .build() 

有人可以解释为什么会发生这种情况,以及如何解决这个问题?

您必须提供依赖关系如下:

 @Provides @Named(LOGGING_INTERCEPTOR) fun provideLoggingInterceptor(): Interceptor = HttpLoggingInterceptor().apply { level = HttpLoggingInterceptor.Level.BODY } 

这里的问题是你实际上提供了HttpLogginInterceptor而不是Interceptor (用于Dagger)。 在这种情况下,您必须明确指定返回types。