Dagger Hilt提示无@Provides方法提供ExecutorService,已配置仍报错如何解决
可能的原因
- 构造函数注入时未指定对应
@Named注解:你声明了两个同类型的ExecutorService绑定,Dagger无法自动匹配无标记的注入点,就会抛出无提供方法的报错。 @Named注解包导入错误:导入了非javax.inject.Named的同名注解,Dagger无法识别该注解的绑定标记作用。- AppModule未配置Hilt必填注解:缺少
@Module注解或者@InstallIn注解,导致Hilt未加载该Module下的绑定规则。 - 项目构建缓存异常:Dagger生成的注入代码未跟随你的配置更新,导致识别不到已有的
@Provides方法。
对应解决方案
- 注入时明确标注对应
@Named注解
Java示例:
@Inject public YourTaskClass(@Named("Single") ExecutorService singleExecutor) { this.singleExecutor = singleExecutor; }
Kotlin示例:
class YourTaskClass @Inject constructor( @Named("FixedSize") private val fixedExecutor: ExecutorService )
- 检查
@Named的导入路径,确保导入的是javax.inject.Named,而非其他库的同名注解。 - 核对AppModule的注解配置,必须同时添加
@Module和对应作用域的@InstallIn注解,示例:
@Module @InstallIn(SingletonComponent.class) public class AppModule { @Provides @Singleton @Named("Single") public ExecutorService provideSingleExecutor() { return Executors.newSingleThreadExecutor(); } @Provides @Singleton @Named("FixedSize") public ExecutorService provideFixedSizeExecutor() { return Executors.newFixedThreadPool(3); } }
- 执行Clean Project + Rebuild Project,清除Dagger的构建缓存后重新编译。
内容的提问来源于stack exchange,提问作者Emmanuel Conradie
相关产品推荐
相关产品推荐

