作者:mobiledu2502874377 | 来源:互联网 | 2023-01-19 12:52
我正在尝试将新的Architecture Components添加ViewModel
到我的应用程序中,同时用匕首注入它们.我的代码基于google 在这里显示的内容.我试图避免ViewModelFactory
为每种ViewModel
类型使用,所以我使用了ViewModelFactory
它Map, Provider> 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, Provider>
似乎有意义,因为它似乎是在编译时创建的.但我只会知道该片段范围内的参数.我怎样才能做到这一点?
谢谢.
编辑:
最后,我采用了不同的方法.现在我为每个ViewModel创建一个工厂,而不是注入ViewModel,我注入了工厂.
我创建了这个库:AutoViewModelFactory
自动生成工厂.这是迄今为止我发现的最佳解决方案.