Итак, я использую Koin
для внедрения зависимости. Вот что я сделал внутри действия
class ModuleDetailActivity : AppCompatActivity() {
private lateinit var moduleId:String
private lateinit var levelModule:Level.Module
private val moduleViewModel: ModuleViewModel by viewModel { parameterOf(moduleId, levelModule) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
...
...
moduleId = intent.getString("module_id")
levelModule = intent.getParcelable("level_module")
...
...
}
}
Теперь у меня есть несколько фрагментов, которые ModuleDetailActivity
можно добавить или заменить, и я хочу тот же экземпляр moduleViewModel
в этих фрагментах без передачи каких-либо параметров внутри Fragment
.
class ModuleDetailFragment : Fragment() {
private val moduleViewModel: ModuleViewModel by sharedViewModel()
...
...
}
Я знаю, что это вызовет ошибку, и, как и ожидалось, вы можете увидеть это
Caused by: org.koin.core.error.InstanceCreationException: Could not create instance for [Factory:'****.ui.module.ModuleViewModel']
Вот как я инициализировал модуль
val viewModelModule = module {
viewModel { (id : String, levelModule:Level.Module) -> ModuleViewModel(id, levelModule, get()) }
}
Есть ли какое-либо решение о том, как можно получить один и тот же экземпляр ModuleViewModel
, определенный внутри действия, без передачи параметра внутрь Fragment
?