Предположим, что модель представления выглядит следующим образом:
public class FooViewModel extends AndroidViewModel {
@Inject public FooViewModel(Application app, SavedStateHandle handle, Bar bar) {
// ...
}
}
Я хочу внедрить Bar
с помощью Dagger 2. Я работаю на Android.
Согласно SavedStateHandle
docs :
Вам следует использовать SavedStateViewModelFactory
, если вы хотите получить этот объект в конструкторе ViewModel
.
Однако, SavedStateViewModelFactory
документы заявляют, что фабрика имеет значение final
, что означает, что я тоже не могу вводить Bar
.
До сих пор я делал инъекции через сеттер:
@Provides
FooViewModel provideFooViewModel(ViewModelStoreOwner owner, Bar bar) {
FooViewModel viewModel = new ViewModelProvider(owner).get(FooViewModel.class);
viewModel.setBar(bar);
return viewModel;
}
Есть ли лучший способ сделать это?
Я хочу использовать инжектор конструктора, пометить переменную экземпляра Bar
как final
и исключить установщик.