【发布时间】:2023-03-26 21:11:01
【问题描述】:
我正在使用 Dagger Hilt 来提供应用程序中的依赖项。我有以下类来实现用例:
BaseUseCase.kt
interface BaseUseCase<in Parameter, out Result> {
suspend operator fun invoke(params: Parameter): Result
}
UseCasesModule.kt
@Module
@InstallIn(ViewModelComponent::class)
object UseCasesModule {
@Provides
fun provideGetUseCase(
repositoryImpl: RepositoryImpl
): GetUseCase {
return GeUseCase(repositoryImpl as Repository>)
}
}
GetUseCase.kt
typealias GetBaseUseCase = BaseUseCase<GetUseCase.Params, Flow<ResultWrapperEntity<List<ModelItem>>>>
class GetUseCase(
private val repository: Repository
) : GetBaseUseCase {
override suspend fun invoke(params: Params) =
repository.get(params.id)
data class Params(
val id: Long
)
}
当我尝试在视图模型中使用 GetBaseUseCase 的抽象时,问题就来了:
@HiltViewModel
class ListViewModel @Inject constructor(
private val useCase: GetUseBaseCase
) : ViewModel()
但如果我像这样注入 GetUseCase 实现,它工作正常:
@HiltViewModel
class ListViewModel @Inject constructor(
private val useCase: GetUseCase
) : ViewModel()
我收到以下错误:
AppClass_HiltComponents.java:131: error: [Dagger/MissingBinding] com.....BaseUseCase<? super com.....GetUseCase.Params,? extends kotlinx.coroutines.flow.Flow<? extends com.....ResultWrapperEntity<? extends java.util.List<com......ItemModel>>>> cannot be provided without an @Provides-annotated method.
公共抽象静态类SingletonC实现AppClass_GeneratedInjector,
我试图在刀柄的模块中返回 GetBaseUseCase 的抽象,但我得到了同样的错误。
【问题讨论】:
标签: android dependency-injection dagger dagger-hilt