Hilt更新后出现Dagger重复绑定警告,请求解释
Hilt重复绑定警告解析与修复
这个警告的核心是:Dagger/Hilt检测到com.demo.myapp.data.repositories.datastores.AppSettingsRepository存在两个冲突的绑定规则,导致框架无法确定注入时该使用哪个实例。
两种冲突的绑定方式
- 第一种绑定:你给
AppSettingsRepository的构造函数添加了@Inject注解,Hilt会自动将这个类绑定到SingletonC组件(全局单例作用域),意味着整个应用生命周期内只会创建一个实例。 - 第二种绑定:你在
com.demo.myapp.di.modules.RepositoryModule中通过@Provides方法手动提供AppSettingsRepository的实例,并且给这个方法标记了@ViewModelScoped作用域,这个作用域会将实例的生命周期和ViewModel绑定,属于ViewModelC组件。
为什么会触发警告
之前Hilt并未严格校验这类跨作用域的重复绑定,但更新后将其列为警告,后续会升级为错误——因为当需要注入AppSettingsRepository时,Hilt无法判断应该使用全局单例实例,还是与ViewModel生命周期绑定的实例。
修复方案
根据你的业务需求二选一即可:
- 保留全局单例:删除
RepositoryModule中对应的@Provides方法,仅保留构造函数上的@Inject注解(如果需要确保单例,可给AppSettingsRepository类添加@Singleton注解)。 - 保留ViewModel作用域实例:删除
AppSettingsRepository构造函数上的@Inject注解,仅保留RepositoryModule中的@Provides方法,确保其@ViewModelScoped作用域配置正确。
内容的提问来源于stack exchange,提问作者Eman
相关产品推荐
相关产品推荐

