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);
    }
}