Как получить доступ к методам ViewModel из WorkManager
Каким образом можно достучаться до методов в ModelView из Worker?
class RefreshWorker(val context: Context, val workerParams: WorkerParameters): Worker(context, workerParams) {
override fun doWork(): Result {
try {
//Вот тут нужен доступ к методу ViewModel
mainViewModel.someMethod()
} catch (ex: Exception) {
return Result.failure()
}
return Result.success()
}
}
Ответы (1 шт):
Можно разные костыли придумать, но лучше так вообще не делать - Worker и ViewModel не должны быть явно связаны и не должны знать друг о друге. Если ваша задача - обновить данные во ViewModel извне - то используйте что-то типа шины данных на паттерне наблюдатель. В зависимости от используемого стэка это может быть RxSubsject, LiveData, StateFlow. И этот наблюдаемый источник данных, находящийся в чём-то типа repository вы можете подключить через, например, DI и во ViewModel и в Worker.
Если же очень захочется написать костыльный и потенциально страшно багованный код сложный в поддержке - то через тот же DI предоставляете единственный экземпляр ViewModel и во фрагмент/активити и в Worker. Но это будет очень, очень плохо.