Как в Koin решить проблему если требуется показывать много Fragment и надо чтобы ViewModel и Fragment были разными

«Как в Koin решить проблему если требуется показывать много Fragment и надо чтобы ViewModel и Fragment были разными» — вопрос из категории DI, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Koin можно использовать viewModel и fragment с параметрами, чтобы создавать уникальные экземпляры для каждого фрагмента. Для этого:

  1. ViewModel с параметром:
val module = module {
    viewModel { (id: String) -> MyViewModel(id) }
}
  1. Fragment с параметром:
class MyFragment : Fragment() {
    private val viewModel: MyViewModel by viewModel { parametersOf("unique_id") }
}
  1. Создание фрагмента:
supportFragmentManager.beginTransaction()
    .replace(R.id.container, MyFragment::class.java, null)
    .commit()

Ключевые моменты:

  • Каждый фрагмент получает свою ViewModel с уникальным параметром
  • Параметры передаются через parametersOf()
  • Koin автоматически управляет жизненным циклом ViewModel