android-studio - 如何使用 Dagger2 android 为 ViewModel 使用构造函数注入(inject)?

标签 android-studio mvvm dependency-injection dagger android-viewmodel

我想将 ViewModel 与 Dagger2 一起使用,但我不知道如何将构造函数注入(inject)与 ViewModelProviders 或 ViewModelProvider.Factory 一起使用
如何将 ViewModel 与构造函数注入(inject)一起使用?我应该使用 ViewModelProvider.Factory 还是 ViewModelProviders?
更新:
您可以在 this link 中找到详细的解决方案

最佳答案

您可以创建自己的自定义类扩展 ViewModelProvider.Factory

class ViewModelFactory @Inject constructor(
private val providers: @JvmSuppressWildcards Map<Class<out ViewModel>, Provider<ViewModel>>
) : ViewModelProvider.Factory {

override fun <T : ViewModel> create(modelClass: Class<T>): T {
    var provider = providers[modelClass]
    if (provider == null) {
        for ((key, value) in providers) {
            if (modelClass.isAssignableFrom(key)) {
                provider = value
                break
            }
        }
    }
    if (provider == null) {
        throw IllegalStateException("unknown model class $modelClass")
    }

    return provider.get() as T
  }
}
为此类创建模块并将模块注入(inject)您的ApplicationComponent类(class)
@Module
abstract class ViewModelFactoryModule {
   @Binds
   abstract fun bindViewModelFactory(viewModelFactory: ViewModelFactory): ViewModelProvider.Factory
}
然后在你的片段里面注入(inject)这个工厂
@Inject
lateinit var factory: ViewModelProvider.Factory
并像这样初始化您的viewModel
val vm: YourViewModel by viewModels { factory }

关于android-studio - 如何使用 Dagger2 android 为 ViewModel 使用构造函数注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63443888/

相关文章:

android - 编辑配置自定义特定的检测运行器缺少属性

java - 写入文件时出现空指针异常 - Android Studio

node.js - 如何根据 Onion/Clean Architecture 原则实现 NodeJS 组件?

java - 如何使用 Google Guice 在运行时基于注释注入(inject)接口(interface)实现

Android Studio 未运行应用程序

java - Android 开发 - GestureDetector.OnGestureListener 或 GestureDetector.SimpleOnGestureListener

ios - ReactiveCocoa 和 MVVM 混淆

mvvm - 在 MVVM 中,长期运行的业务操作在哪里处理?

model-view-controller - 澄清 :MVC, MVP,MVVM

c# - 在 ASP.NET Core 中启动 BackgroundService 的正确方法