我在带有 Dagger 的 Android 中使用 ViewModel 来管理依赖项。我的 ViewModel 将在创建时从 MainActivity 获取一个 id。所以我在这里有这些代码:
在活动中:
@inject ViewModelProviderFactory mViewModelFactory;
ViewModelProviders.of(this, mViewModelFactory).get(MyViewModel.class);
我的工厂供应商:
public class ViewModelProviderFactory implements ViewModelProvider.Factory {
private int id;
@inject
public ViewModelProviderFactory(int id) {
this.id = id;
}
@Override
public <T extends ViewModel> T create(Class<T> modelClass) {
return new MyViewModel(id);
}
}
为了工作,我需要向我的模块添加一个参数:
@Module
public class MainActivityModule {
int id;
public MainActivityModule(int id){
this.id = id;
}
@Provides
ViewModelProvider.Factory mainViewModelProvider() {
return new ViewModelProviderFactory<>(id);
}
}
或者我可以直接在组件中做它并使其抽象。在新的 Dagger 中,我可以使用 Dagger 类来制作活动或片段组件。因此,我应该为每个活动创建子组件,并为我应该编写的其他代码创建一个 Builder 和音调。
是否有任何简单和更好的方法来防止这些额外的代码,或者我最好通过在这样的活动中调用一个新工厂来创建我的工厂?:
ViewModelProviders.of(this, new ViewModelProviderFactory(id)).get(MyViewModel.class);