相关疑难解决方法(0)

Dagger2.10+:在具有运行时依赖关系的 Fragment/Activity 中注入 ViewModel

对于ViewModels只有编译时依赖项,我使用ViewModelProvider.Factory来自架构的组件,如下所示:

class ViewModelFactory<T : ViewModel> @Inject constructor(private val viewModel: Lazy<T>) : ViewModelProvider.Factory {
    @Suppress("UNCHECKED_CAST")
    override fun <T : ViewModel?> create(modelClass: Class<T>): T = viewModel.get() as T
}
Run Code Online (Sandbox Code Playgroud)

在我ActivityFragment我得到ViewModel以下方式:

@Inject
lateinit var viewModelFactory: ViewModelFactory<ProductsViewModel>
Run Code Online (Sandbox Code Playgroud)

这工作正常,直到我ViewModel需要一个仅在运行时可用的依赖项。

场景是,我有一个列表Product,我在RecyclerView. 对于每个Product,我都有ProductViewModel

现在,ProductViewModel需要各种依赖关系的喜欢ResourceProviderAlertManager等这些都可以编译时,我可以Inject他们使用 constructor 或者我可以Provide他们使用Module。但是,除了上述依赖项之外,它还需要Product对象,该对象仅在运行时可用,因为我通过 API 调用获取产品列表。

我不知道如何注入仅在运行时可用的依赖项。所以我现在正在做以下事情: …

android dependency-injection assisted-inject dagger-2 android-viewmodel

5
推荐指数
1
解决办法
723
查看次数

我可以使用某种辅助的Inject with Dagger吗?

使用Google Guice或Gin我可以指定参数不受依赖注入框架控制:

class SomeEditor {


  @Inject
  public SomeEditor(SomeClassA a, @Assisted("stage") SomeClassB b) {
  }

}
Run Code Online (Sandbox Code Playgroud)

辅助参数stageSomeEditor创建实例时指定.

SomeClassA的实例取自对象图,SomeClassB的实例在运行时从调用者获取.

在Dagger中有类似的方法吗?

java gwt-gin guice dagger dagger-2

2
推荐指数
1
解决办法
1183
查看次数