Сначала пробую android ViewModel
и Hilt
DI
Как я понимаю из ссылки ниже, для инициализации ViewModel значением во время выполнения я должен использовать ViewModelFactory
//ViewModel
class ScoreViewModel(finalScore: Int) : ViewModel() {
// The final score
var score = finalScore
init {
Log.i("ScoreViewModel", "Final score is $finalScore")
}
}
//ViewModelFactory
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(ScoreViewModel::class.java)) {
return ScoreViewModel(finalScore) as T
}
throw IllegalArgumentException("Unknown ViewModel class")
}
//Fragment
viewModelFactory = ScoreViewModelFactory(ScoreFragmentArgs.fromBundle(arguments!!).score)
И чтобы использовать ViewModel с рукоятью, я должен использовать @ViewModelInject
, как описано в ссылке ниже.
//ViewModel
class ExampleViewModel @ViewModelInject constructor(
private val repository: ExampleRepository,
@Assisted private val savedStateHandle: SavedStateHandle
) : ViewModel() {
...
}
//Activity / Fragment
@AndroidEntryPoint
class ExampleActivity : AppCompatActivity() {
private val exampleViewModel: ExampleViewModel by viewModels()
...
}
Но как использовать Hilt
с ViewModelFactory
?
Кажется, ответ находится в @Assisted
, но я не могу понять, как
Как сказать рукоятке, что мне нравится вводить интерфейсы репозитория в ViewModel, при этом позволяя ViewModelFactory инициализировать ViewModel с параметрами во время выполнения?