提问者:小点点

无法使用匕首柄创建类ViewModel的实例


我的视图模型:

class LoginViewModel @ViewModelInject constructor(
    private val loginUseCase: LoginUseCase
) : ViewModel() {

    val currentResult: MutableLiveData<String> by lazy {
        MutableLiveData<String>()
    }

    fun loginUseCase(username: String, password: String) {
        viewModelScope.launch {
            loginUseCase.invoke(username, password).apiKey.let {
                currentResult.value = it
            }
        }
    }

}

正在被我的MainActivity使用:

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {

    private val loginViewModel: LoginViewModel by viewModels()

我知道ViewModelProvider需要一个空构造函数,但我需要使用LoginUseCase:

class LoginUseCase @Inject constructor(
    private val apiService: ApiServiceImpl
) : UseCase<Unit>() {
    suspend operator fun invoke(username: String, password: String) =
        apiService.login(username, password)
}

在模型视图内部,但我得到错误:

无法创建类com. example.myboard.ui.login.LoginViewModel的实例

在运行时,我不知道如何在LoginViewModel中管理LoginUseCase


共1个答案

匿名用户

通过使用@HiltViewModel对其进行注释并在ViewModel对象的构造函数中使用@Inject注释来提供ViewModel

@HiltViewModel
class LoginViewModel @Inject constructor(
  private val loginUseCase: LoginUseCase
) : ViewModel() {
  ...
}

Hilt也需要知道如何提供ApiServiceImpl的实例。阅读此处了解如何使用@Binds注入接口实例。

如果你还有问题,请告诉我。