我正在尝试将新的架构组件添加ViewModel
到我的应用程序中,同时用匕首注入它们。我的代码基于 google在此处显示的内容。我试图避免ViewModelFactory
每种ViewModel
类型都有一个,所以我使用了ViewModelFactory
那个接收Map<Class<? extends ViewModel>, Provider<ViewModel>> creators
。它适用于ViewModels
与@Singleton
范围有依赖关系的情况。但是,我ViewModels
的一个依赖来自片段。这是该片段的模块:
@Module
public abstract class DownloadIssueDialogFragmentModule {
@Binds
abstract DialogFragment dialogFragment(DownloadIssueDialogFragment dialogFragment);
@Provides
@FragmentScope
static Issue provideIssue(DownloadIssueDialogFragment dialogFragment) {
return dialogFragment.getIssue();
}
}
我的ViewModelModule
:
@Module
public abstract class ViewModelModule {
@Binds
abstract ViewModelProvider.Factory bindViewModelFactory(ViewModelFactory factory);
@Binds
@IntoMap
@ViewModelKey(DownloadIssueViewModel.class)
abstract ViewModel bindDownloadIssueViewModel(DownloadIssueViewModel viewModel);
}
匕首说它不能提供Issue
。这是有道理的,因为Map<Class<? extends ViewModel>, Provider<ViewModel>>
似乎是在编译时创建的。但我只会在该片段的范围内知道参数。我怎样才能做到这一点?
谢谢你。
编辑:
最后,我采用了不同的方法。现在我为每个 ViewModel 创建一个工厂,而不是注入 ViewModel,而是注入工厂。
我创建了这个库:AutoViewModelFactory
自动生成工厂。这是迄今为止我找到的最好的解决方案。