匕首柄:如果没有@Provides-annotated 方法,则无法提供
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()
当我在视图模型中使用如下界面时
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()