![](/img/trans.png)
[英]Dagger Hilt: Repository cannot be provided without an @Provides-annotated method
[英]Dagger Hilt: cannot be provided without an @Provides-annotated method
當我在視圖模型中使用如下界面時
class MainViewModel @ViewModelInject constructor(
private val trafficImagesRepository: TrafficImageRepository, <----------------- Not working
@Assisted private val savedStateHandle: SavedStateHandle
) : ViewModel()
我收到如下錯誤
cannot be provided without an @Provides-annotated method.
public abstract static class SingletonC implements MainApplication_GeneratedInjector,
我的界面如下
interface TrafficImageRepository {
suspend fun getTrafficImages() : NetworkResponse<TrafficData, ErrorTrafficImages>
}
存儲庫 class 如下所示
class DefaultTrafficImagesRepository @Inject constructor(private val trafficImageService: TrafficImageService) : TrafficImageRepository {
override suspend fun getTrafficImages(): NetworkResponse<TrafficData, ErrorTrafficImages> {
lateinit var response: NetworkResponse<TrafficData, ErrorTrafficImages>
withContext(IO) {
val currentTimestamp = Constants.getCurrentTime()
response = trafficImageService.getTrafficImages(currentTimestamp)
}
return response
}
}
但是,當我直接使用 DefaultTrafficImagesRepository class 而不是 Interface 時,我的應用程序能夠毫無錯誤地構建。
class MainViewModel @ViewModelInject constructor(
private val trafficImagesRepository: DefaultTrafficImagesRepository , <----------------- Working Fine
@Assisted private val savedStateHandle: SavedStateHandle
) : ViewModel()
你必須綁定接口
@Module
@InstallIn(ViewModelComponent::class)
abstract class RepositoryModule {
@Binds
abstract fun bindRepository(impl: DefaultTrafficImagesRepository): TrafficImageRepository
}
並以這種方式使用視圖模型注入
@HiltViewModel
class MainViewModel @Inject constructor(
private val trafficImagesRepository: TrafficImageRepository,
@Assisted private val savedStateHandle: SavedStateHandle
) : ViewModel()
遲到總比不到好。 此外,您還需要執行接受的答案中提到的事情。如果您使用的是 compose 或最新的 Hilt 版本,請通過以下方式初始化您的 ViewModel: val viewModel: YourViewModel by viewModels()
不要使用以下方式: @Inject lateinit var viewModel: YourViewModel
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.