使用依赖注入编译问题

Issue compiling with dependency injection

从 java 进行 Kotlin 转换时出错,此项目正在测试 Github Api 并在 recyclerview.I 中显示数据得到编译错误,我无法解决 Dagger2,它在 Java 中工作,但是当转换为 Kotlin 时,我在运行时遇到编译错误。 似乎是将 api 方法注入视图模型 我已尝试跟踪错误然后清理并重建应用程序 我也尝试过使缓存无效并重新启动,但似乎从 Java 转换为 Kotlin 时出现错误。任何帮助,将不胜感激。 这是我的 class:

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)
 }
}

我的组件class:

 @Singleton
 @Component(modules = arrayOf(NetworkModule::class))
 interface AppComponent {

/**
 * inject required dependencies into MainActivityListViewModel
 */

fun inject(mainActivityListViewModel: MainActivityListViewModel)


@Component.Builder
interface Builder {
    fun build(): AppComponent
    fun networkModule(networkModule: NetworkModule): Builder
 }
}

还有我的 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
    }
 }
}

这是我得到的错误:

[Dagger/MissingBinding] repos.network.RepoRepository cannot be provided without an @Inject constructor or an @Provides-annotated method. This type supports members injection but cannot be implicitly provided. public abstract repos.network.RepoRepository repoRepository(); ^ repos.network.RepoRepository is provided at components.AppComponent.repoRepository() e: repos/di/components/AppComponent.java:19: error:
[Dagger/MissingBinding] repos.network.RepoRepository cannot be provided without an @Inject constructor or an @Provides- annotated method. This type supports members injection but cannot be
implicitly provided. ^ repos.network.RepoRepository is injected at repos.viewmodels.MainActivityListViewModel.ListViewModel(repoRepository) repos.viewmodels.MainActivityListViewModel is injected at repos.di.components.AppComponent.inject(repos.viewmodels.MainActivityListViewModel)

您的错误清楚地表明:

[Dagger/MissingBinding] repos.network.RepoRepository cannot be provided without an @Inject constructor or an @Provides-annotated method.

您没有为 RepoRepository 定义构造函数 class。

它应该看起来像这样:

class RepoRepository @Inject constructor(private val repoService: GithubRepos) {//the rest of your code here}

这也适用于您的视图模型 class。 如果您正在使用 android ViewModel 架构组件,我建议您阅读此 article,其中解释了如何将其与 Dagger2 一起使用。

希望这对您有所帮助。