android - 如果没有 @Provides-annotated 方法,就无法提供 Android Hilt。在存储库接口类中
问题描述
我收到此错误错误:[Dagger / MissingBinding] com.eduramza.domain.repositories.RemoteRepository 不能在没有 @Provides-annotated 方法的情况下提供。使用 android hilt 实现我的存储库接口时。
那是因为我的 useCase 实现了我的存储库接口。我的实现可能有什么问题,下面是代码:
应用程序视图模型:
@HiltViewModel
class RemoteListViewModel @Inject constructor(
private val useCase: GetTickersUseCase
): ViewModel() {
}
域.用例:
class GetTickersUseCase @Inject constructor(
private val remoteRepository: RemoteRepository)
: SingleUseCase<MainCoins> {
override suspend fun executeCall(): Flow<Result<MainCoins>> = remoteRepository.readAllTickers()
}
domain.repository:
interface RemoteRepository {
suspend fun readAllTickers(): Flow<Result<MainCoins>>
}
core.repositoryImpl:
class RemoteRepositoryImpl @Inject constructor(
private val apiService: BraziliexService,
private val tickersMapper: TickersMapper
) : RemoteRepository{
override suspend fun readAllTickers(): Flow<Result<MainCoins>> {
TODO("Not yet implemented")
}
}
核心模块:
@Module
@InstallIn(ActivityComponent::class)
abstract class RemoteModule {
@Binds
abstract fun bindRemoteRepository(
remoteRepositoryImpl: RemoteRepositoryImpl
): RemoteRepository
}
我的多模块应用程序在这个结构 中核心实现域,应用程序实现两者。
为什么绑定方法没有被初始化?
解决方案
您使用的是 ActivityComponent 但 RemoteRepository 是 ViewModel 的间接依赖项,因此它应该与 ViewModel 生命周期相关联
所以代替ActivityComponent
@Module
@InstallIn(ActivityComponent::class)
abstract class RemoteModule {
@Binds
abstract fun bindRemoteRepository(
remoteRepositoryImpl: RemoteRepositoryImpl
): RemoteRepository
}
使用这个ViewModelComponent
@Module
@InstallIn(ViewModelComponent::class)
abstract class RemoteModule {
@Binds
abstract fun bindRemoteRepository(
remoteRepositoryImpl: RemoteRepositoryImpl
): RemoteRepository
}
推荐阅读
- scala - 如何为 Java 集合制作 mutable.Builder?
- oracle11g - 方法 DBMSOUTPUT_LINESARRAY (Oracle) 到字符串
- python - 向量化逐行 numpy 操作
- pandas - 使 groupby.apply 更高效或转换为 spark
- coldfusion - 更新查询不使用 CFQUERYPARAM 更新整数字段
- c# - 我应该在 foreach C# 中调用 ToList()
- android - 公开 google-service.json(来自 Firebase)是否安全?
- reactjs - 我的应用程序中的子组件可以使用上下文与主应用程序组件进行通信吗?
- javascript - 如何在下面的示例中使用正则表达式?
- python-3.x - 无法比较不同的日子