最近的刀柄更新增加了一些警告,我有点不知道他们想告诉我什么,而警告中的链接也没有多大帮助。
com.demo.myapp.data.repositories.datastores.AppSettingsRepository是多次绑定的:@Inject com.demo.myapp.data.repositories.datastores.AppSettingsRepository(com.demo.myapp.data.datastores.CompanySettingsDataStore) com.demo.myapp.App_HiltComponents.SingletonC“提供@dagger.hilt.android.scopes.ViewModelScoped @org.jetbrains.annotations.NotNull com.demo.myapp.data.repositories.datastores.AppSettingsRepository com.demo.myapp.di.modules.RepositoryModule.provideAppSettingsRepository(com.demo.myapp.data”.datastores.CompanySettingsDataStore) com.demo.myapp.App_HiltComponents.SingletonC?com.demo.myapp.App_HiltComponents.ActivityRetainedC?com.demo.myapp.App_HiltComponents.ViewModelC这个条件以前从未被验证过,很快就会成为一个错误。见https://dagger.dev/conflicting-inject。
我希望有人能更好地解释这个警告,因为我不知道它认为什么是重复的。
发布于 2022-08-17 20:00:41
错误说明AppSettingsRepository绑定了两次:一次在SingletonComponent中,一次在ViewModelComponent中。
SingletonComponent绑定来自AppSettingsRepository上的一个@Inject注释。SingletonComponent中提供的东西(直接或间接地)依赖于AppSettingsRepository,所以Dagger会自动将该绑定放在SingletonComponent中。
ViewModelComponent绑定来自RepositoryModule中的显式@Provides方法,该方法安装在ViewModelComponent中。
正如链接页面中提到的,您有三个选项:
@Singleton对类进行注释。@Provides方法的唯一依赖项已经在SingletonComponent中可用,因此在本例中这当然是可能的。@Provides方法除了简单地调用构造函数之外还有其他逻辑,而且在SingletonComponent中不需要这种逻辑,这是适当的。在这种情况下,您将希望在ViewModelComponent中生成依赖于AppSettingsRepository的任何其他内容,并对此依赖项使用限定符。注意,错误输出中的SingletonC是由Hilt生成的Dagger组件,对应于Hilt的SingletonComponent。这同样适用于ViewModelC,它是对应于ViewModelComponent的Dagger子组件。警告是由Dagger (而不是Hilt)在处理这些组件时生成的。
https://stackoverflow.com/questions/73393844
复制相似问题