@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。