繁体   English   中英

注入通用 ViewModel Dagger Hilt Android

[英]Inject generic ViewModel Dagger Hilt Android

您好,我想在我的 BaseActivity 中注入通用 ViewModel 类型,我该如何使用 Dagger Hilt 解决这个问题。

@AndroidEntryPoint
 abstract class BaseActivity<VM: BaseViewModel> : AppCompatActivity() {

@Inject
lateinit var viewModel: VM

}

更新 1

这是我所说的来自 Hilt 团队的回复:

所以@ViewModelInject 是一种单向的东西,在某种程度上类似于@AndroidEntryPoint。 它只会将 Dagger 依赖项添加到您的 class 中。它不会将您的 ViewModel 作为 Dagger 绑定添加到 object 图中。 为了在提供程序或其他地方访问您的 ViewModel,您仍然需要 go 通过正常的 Android API 获取视图 model 就像使用 ViewModelProvider 一样。

我们无法将其提供到图表中的原因是我们不知道您想将其与哪个 ViewModelStoreOwner 一起使用。

您可以在此处找到此评论。


原始答案

几天前我试图这样做,我想我在 inte.net 上的某个地方读到它是 Hilt 不可能这样做的(直到现在我找不到链接)。

通常在 Java 中我们这样创建 ViewModel:

MyViewModel model = new ViewModelProvider(this).get(MyViewModel.class);

我们需要在ViewModelProvider构造函数中提供ViewModelStoreOwner ,我了解到MyViewModel无法知道您希望为哪个ViewModelStoreOwner创建 MyViewModel。

因此,我们将继续以旧方式创建视图模型,在 Kotlin 中,您将坚持这样做:

@AndroidEntryPoint
abstract class BaseActivity: AppCompatActivity() {

    private val viewModel: MyViewModel by viewModels()

}

一旦我从 Hilt 团队找到提到这一点的评论,我将在此处更新答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM