Kotlin 使用依赖项注入进行编译时出现的问题
从java转换Kotlin时出错,此项目正在测试Github Api并在recyclerview中显示数据。我得到了一个编译错误,我无法为Kotlin 使用依赖项注入进行编译时出现的问题,kotlin,dagger-2,Kotlin,Dagger 2,从java转换Kotlin时出错,此项目正在测试Github Api并在recyclerview中显示数据。我得到了一个编译错误,我无法为Dagger2解决它,它在java中工作,但当转换到Kotlin时,我在运行时得到了一个编译错误。 这似乎与将api方法注入视图模型有关 我已尝试跟踪错误,然后清理和重建应用程序 我也尝试过使缓存失效并重新启动,但从Java转换成Kotlin时似乎出现了错误。任何帮助都将不胜感激。 这是我的班级: class RepoRepository { privat
Dagger2
解决它,它在java
中工作,但当转换到Kotlin
时,我在运行时得到了一个编译错误。
这似乎与将api方法注入视图模型有关
我已尝试跟踪错误,然后清理和重建应用程序
我也尝试过使缓存失效并重新启动,但从Java转换成Kotlin时似乎出现了错误。任何帮助都将不胜感激。
这是我的班级:
class RepoRepository {
private lateinit var repoService: GithubRepos
@Inject
fun RepoRepository(repoService: GithubRepos) {
this.repoService = repoService
}
fun getRepositories(): Single<List<Repo>> {
return repoService.getRepos()
}
fun getSingleRepo(owner: String, name: String): Single<Repo> {
return repoService.getSingleRepo(owner, name)
}
}
和我的ViewModel:
class MainActivityListViewModel : BaseViewModel() {
private lateinit var repoRepository: RepoRepository
private var disposable: CompositeDisposable? = null
private val repos = MutableLiveData<List<Repo>>()
private val repoLoadError = MutableLiveData<Boolean>()
private val loading = MutableLiveData<Boolean>()
@Inject
fun ListViewModel(repoRepository: RepoRepository) {
this.repoRepository = repoRepository
disposable = CompositeDisposable()
fetchRepos()
}
fun getRepos(): LiveData<List<Repo>> {
return repos
}
fun getError(): LiveData<Boolean> {
return repoLoadError
}
fun getLoading(): LiveData<Boolean> {
return loading
}
private fun fetchRepos() {
loading.value = true
disposable?.add(repoRepository.getRepositories()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(object :
DisposableSingleObserver<List<Repo>>() {
override fun onSuccess(value: List<Repo>) {
repoLoadError.value = false
repos.value = value
loading.value = false
}
override fun onError(e: Throwable) {
repoLoadError.value = true
loading.value = false
}
}))
}
override fun onCleared() {
super.onCleared()
if (disposable != null) {
disposable!!.clear()
disposable = null
}
}
}
class MainActivityListViewModel:BaseViewModel(){
私有lateinit var repoRepository:repoRepository
私有var一次性:CompositeDisposable?=null
private val repos=MutableLiveData()
private val repoLoadError=MutableLiveData()
private val load=MutableLiveData()
@注入
趣味ListViewModel(repoRepository:repoRepository){
this.repository=repository
一次性=复合可降解()
fetchRepos()
}
fun getRepos():LiveData{
回购回报
}
fun getError():LiveData{
返回重新加载错误
}
fun getLoading():LiveData{
回装
}
私人债券{
loading.value=true
一次性?.add(repository.getRepositories()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.th(对象:
可处置单观察员(){
成功时覆盖乐趣(值:列表){
repoLoadError.value=false
回购价值=价值
loading.value=false
}
覆盖有趣的错误(e:可丢弃){
repoLoadError.value=true
loading.value=false
}
}))
}
覆盖有趣的onCleared(){
super.onCleared()
if(一次性!=null){
一次性!!.clear()
一次性=空
}
}
}
这是我遇到的错误:
[Dagger/MissingBinding]repos.network.repository不能为
提供时没有@Inject构造函数或@Provides注释
方法。此类型支持成员注入,但不能为
含蓄地提供。
公共摘要repos.network.repository
repository();
^
repos.network.repository提供于
components.AppComponent.repository()e:repos/di/components/AppComponent.java:19:错误:[Dagger/MissingBinding]repos.network.repository不能为 提供时没有@Inject构造函数或@Provides注释 方法。此类型支持成员注入,但不能为
含蓄地提供。 ^ repos.network.repository在 repos.viewmodels.MainActivityListViewModel.ListViewModel(repoRepository) repos.viewmodels.MainActivityListViewModel在 repos.di.components.AppComponent.inject(repos.viewmodels.MainActivityListViewModel)
你的错误清楚地表明: [Dagger/MissingBinding]如果没有@Inject构造函数或@Provides注释方法,则无法提供repos.network.repository 您没有为RepoRepository类定义构造函数 它应该是这样的:
class RepoRepository @Inject constructor(private val repoService: GithubRepos) {//the rest of your code here}
这也适用于viewmodel类。
如果您使用的是android ViewModel架构组件,我建议您阅读本文,其中解释了如何将其与Dagger2一起使用
希望这有帮助 您的错误清楚地表明: [Dagger/MissingBinding]如果没有@Inject构造函数或@Provides注释方法,则无法提供repos.network.repository 您没有为RepoRepository类定义构造函数 它应该是这样的:
class RepoRepository @Inject constructor(private val repoService: GithubRepos) {//the rest of your code here}
这也适用于viewmodel类。
如果您使用的是android ViewModel架构组件,我建议您阅读本文,其中解释了如何将其与Dagger2一起使用
希望这有帮助