我已经设置了一个与
考虑到有
我想要的是指示dagger在以下代码中注入已创建的
这是因为
因此,dagger可以自由地假定这是向
我知道如何为普通的Dagger创建东西,但我不知道如何为Dagger-Android做到这一点,而这个问题是特别针对Dagger-Android设置的。
作为一个临时的解决方案,我目前正在手动设置该实例:
GithubBrowserSample
非常相似的项目,因此dagger的设置是相同的。考虑到有
ActivityViewModel
和FragmentViewModel
,它们具有非零参数构造函数,因此它们通过自定义ViewModelProvider.Factory
从ViewModelProviders
获取。我想要的是指示dagger在以下代码中注入已创建的
ActivityViewModel
实例:
class FragmentViewModel @Inject constructor(
private val activityViewModel: ActivityViewModel
private val foo: Foo
) : ViewModel() {
...
}
根据当前声明,Dagger将创建ActivityViewModel
的新实例,而不管是否已存在该实例。这是因为
ActivityViewModel
存在一个带有@Inject注释的构造函数。因此,dagger可以自由地假定这是向
FragmentViewModel
提供ActivityViewModel
实例的正确方式。我知道如何为普通的Dagger创建东西,但我不知道如何为Dagger-Android做到这一点,而这个问题是特别针对Dagger-Android设置的。
作为一个临时的解决方案,我目前正在手动设置该实例:
class MyFragment : Fragment {
...
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel = ViewModelProviders.of(this, viewModelFactory).get(FragmentViewModel::class.java)
viewModel.activityViewModel = ViewModelProviders.of(activity!!, viewModelFactory).get(ActivityViewModel::class.java)
}
...
}
正确的方式是将父ViewModel注入到子ViewModel中吗?
findViewById()
有什么关系呢?“我会直接从片段中进行操作,通知它的活动。”为什么片段需要了解活动的视图层次结构呢? - azizbekian