如何在 ViewModel class Kotlin 的函数内使用存储库对象?

How to use a repository object inside a function in a ViewModel class Kotlin?

我有这个class:

class MyViewModel @Inject constructor(repository: MyRepository): ViewModel () {
    lateinit var myLiveData: LiveData<User>

    fun signIn(credential: AuthCredential) {
        myLiveData = repository.signIn(credential)
    }

    val otherLiveData = repository.signOut() //Works fine
}

问题是 repository 不能在 signIn 函数中使用,我不知道为什么。但是,对 signOut 的第二次调用有效。有人可以帮忙吗?

使用如下主构造函数和参数创建 class:

class MyViewModel @Inject constructor(repository: MyRepository): ViewModel () { ... }

导致repository参数不是属性,也就是说不能在[=的其他函数中使用31=]。但它可以用在初始化程序块和 属性 初始化程序中,声明在 class 主体中:

class MyViewModel(repo: MyRepository) {
    val repository = repo
}

但是,Kotlin 使用 valvar 关键字声明属性并从主构造函数初始化它们的语法更简洁:

class MyViewModel @Inject constructor(val repository: MyRepository): ViewModel () { ... }

如果您使用 valvar 关键字声明参数,它将被视为 属性 并在 class 的其他函数中可用。

More info about constructors and parameters in Kotlin.