Есть несколько вещей, которые необходимо учитывать перед использованием ViewModel
и ViewModelFactory
ViewModel
- это LifecycleAware Components
. ViewModel
выжить configuration
изменения. ViewModelProvider' can only instantiate
ViewModel` с конструктором без аргументов.
Зачем нам нужен фабричный шаблон?
Для создания экземпляра ViewModel
с аргументами необходимо использовать ViewModelFactory
. ViewModelProviders
Утилита не может создать экземпляр ViewModel с помощью конструктора аргументов, поскольку она не знает, как и какие объекты передавать в конструктор.
Кроме того, вы должны следовать принципу внедрения зависимостей. Класс не должен создавать зависимости, в которых он нуждается. Оно должно быть предоставлено, а не создано.
Например -
public class LogInViewModel extends ViewModel {
private final LogInRepo repo;
public LogInViewModel (LogInRepo repo) {
/* this.repo = new LogInRepo(); Not recommended, It violates DI principle*/
this.repo = repo;
}
}