我们的应用程序遵循干净的架构,因此在域层中,我们有一个接口和一个用例,如下所示:
interface MyRepository {
suspend fun doSomething(): Result<String>
}
class MyUseCase @Inject constructor(private val repository: MyRepository) {
// implementation
}
在数据层,我们有一个MyRepository的实现,例如名为MyRepositoryImpl。我们像这样绑定仓库:
@Binds
abstract fun binMyRepostory(repository: MyRepositoryImpl): MyRepository
我们在视图模型中使用@AssistedInject,如下所示:
class MyViewModel @AssistedInject constructor(
private val myUseCase: MyUseCase,
@Assisted private var id: Int
) : ViewModel() {
@AssistedFactory
interface Factory {
fun create(id: Int): MyViewModel
}
companion object {
fun provideFactory(
assistedFactory: Factory,
id: Int
): ViewModelProvider.Factory = object : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return assistedFactory.create(id) as T
}
}
}
}
运行应用程序会显示此错误,但在没有AssistedInject的视图模型中,它可以正常工作。
It error: [Dagger/MissingBinding] package.MyRepository cannot be provided without an @Provides-annotated method.
1条答案
按热度按时间arknldoa1#
检查创建依赖项的模块安装在何处。
我也遇到了这个问题,并注意到我正在
ViewModelComponent::class
中安装我的模块。可能是因为从ViewModel类中删除了
@HiltViewModel
,所以在ViewModelComponent::class
中安装时会出现这个问题。为了解决这个问题,我不得不将安装模块的组件更改为,例如,
SingletonComponent::class
。