Android 架构组件:如何插入存储库参数
Android Architecture Component: How to insert repository parameter
在视图模型 class 中,我看到了示例代码,其中构造函数将存储库作为参数。像这样:
public SampleViewModel(SampleRepository sampleRepository){
...
}
但在 activity 中,您使用此行创建视图模型 class ViewModelProviders.of(this).get(SampleViewModel.class)
。如何将存储库作为参数传递给视图模型?我也提到 "dependency injection"。作为一个没有经验的程序员,如果 DI 与我的问题有关,谁能提供建议?
您必须在获取视图模型时提供 ViewModelProvider.Factory。
ViewModelProviders.of(this, new SampleViewModelFactory(sampleRepo)).get(SampleViewModel.class)
这是一个示例:
class SampleViewModelFactory implements ViewModelProvider.Factory {
private final SampleRepository repo;
@Inject
public SampleViewModelFactory(SampleRepository repo) {
this.repo = repo;
}
@Override
public SampleViewModel create(Class modelClass) {
return new SampleViewModel(repo);
}
}
在视图模型 class 中,我看到了示例代码,其中构造函数将存储库作为参数。像这样:
public SampleViewModel(SampleRepository sampleRepository){
...
}
但在 activity 中,您使用此行创建视图模型 class ViewModelProviders.of(this).get(SampleViewModel.class)
。如何将存储库作为参数传递给视图模型?我也提到 "dependency injection"。作为一个没有经验的程序员,如果 DI 与我的问题有关,谁能提供建议?
您必须在获取视图模型时提供 ViewModelProvider.Factory。
ViewModelProviders.of(this, new SampleViewModelFactory(sampleRepo)).get(SampleViewModel.class)
这是一个示例:
class SampleViewModelFactory implements ViewModelProvider.Factory {
private final SampleRepository repo;
@Inject
public SampleViewModelFactory(SampleRepository repo) {
this.repo = repo;
}
@Override
public SampleViewModel create(Class modelClass) {
return new SampleViewModel(repo);
}
}