Dagger/MissingBinding报错:无法提供HttpLoggingInterceptor求解决
解决Dagger Hilt的[Dagger/MissingBinding] HttpLoggingInterceptor依赖问题
这个错误的核心是Dagger Hilt不知道如何创建okhttp3.logging.HttpLoggingInterceptor实例——它是OkHttp库提供的第三方类,没有自带@Inject注解的构造方法,而你的provideOkHttpClient方法声明需要这个实例作为参数,但你没在Hilt模块中提供对应的创建逻辑。
解决方案
在你的NetworkModule中添加一个带@Provides注解的方法,专门负责创建并返回HttpLoggingInterceptor实例,还可以在这里配置日志级别等参数。
修改后的完整NetworkModule代码:
@InstallIn(SingletonComponent::class) @Module object NetworkModule { @Singleton @Provides fun providesRetrofit(): Retrofit.Builder { return Retrofit.Builder().baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()) } // 新增:提供HttpLoggingInterceptor实例的方法 @Singleton @Provides fun provideHttpLoggingInterceptor(): HttpLoggingInterceptor { val interceptor = HttpLoggingInterceptor() // 根据需求设置日志级别,BODY级别会打印完整的请求和响应内容 interceptor.level = HttpLoggingInterceptor.Level.BODY return interceptor } @Singleton @Provides fun provideOkHttpClient(interceptor: HttpLoggingInterceptor): OkHttpClient { return OkHttpClient.Builder().addInterceptor(interceptor).build() } @Singleton @Provides fun providesNewsService(retrofitBuilder: Retrofit.Builder, okHttpClient: OkHttpClient): NewsService { return retrofitBuilder.client(okHttpClient).build().create(NewsService::class.java) } }
新增的provideHttpLoggingInterceptor方法通过@Provides和@Singleton注解,告诉Hilt如何创建HttpLoggingInterceptor实例,这样当provideOkHttpClient需要依赖该实例时,Hilt就能自动完成注入。
内容的提问来源于stack exchange,提问作者Shiva Giri
相关产品推荐
相关产品推荐

