Я использую ViewModel в Android с Dagger для управления зависимостями.Моя ViewModel будет получать идентификатор из MainActivity при создании.Итак, у меня есть следующие коды:
В Activity:
@inject ViewModelProviderFactory mViewModelFactory;
ViewModelProviders.of(this, mViewModelFactory).get(MyViewModel.class);
Поставщик My Factory:
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 и тонов других кодов, которые я должен написать.
Есть ли какой-нибудь простой и лучший способ предотвратить эти дополнительные коды, или лучше, если бы я создал свой Factory, вызвав простоновый завод в деятельности, как это?:
ViewModelProviders.of(this, new ViewModelProviderFactory(id)).get(MyViewModel.class);