Kotlin 使用依赖项注入进行编译时出现的问题

Kotlin 使用依赖项注入进行编译时出现的问题,kotlin,dagger-2,Kotlin,Dagger 2,从java转换Kotlin时出错,此项目正在测试Github Api并在recyclerview中显示数据。我得到了一个编译错误,我无法为Dagger2解决它,它在java中工作,但当转换到Kotlin时,我在运行时得到了一个编译错误。 这似乎与将api方法注入视图模型有关 我已尝试跟踪错误,然后清理和重建应用程序 我也尝试过使缓存失效并重新启动,但从Java转换成Kotlin时似乎出现了错误。任何帮助都将不胜感激。 这是我的班级: class RepoRepository { privat

从java转换Kotlin时出错,此项目正在测试Github Api并在recyclerview中显示数据。我得到了一个编译错误,我无法为
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一起使用

希望这有帮助