Внедрение коинов в WorkManager

У меня есть базовый менеджер по работе

class BackgroundSyncWorker (
    appContext: Context,
    workerParams: WorkerParameters
): Worker(appContext, workerParams) {

    override fun doWork(): Result {
        return Result.success()
    }
}

И я хочу добавить сюда свой репозиторий, чтобы поработать с моей базой данных. Я правильно настроил Koin, но, похоже, не могу найти способ, как внедрить мою зависимость в Worker. Я пробовал унаследовать KoinComponent и пытался сделать это с его помощью, но by inject() не существует, но есть два by inject метода, которые я не могу найти, как использовать. Похоже, что нет никакой информации о том, как вводить в менеджеров, хотя есть несколько для использования кинжала.


person Daniel Sims    schedule 04.08.2019    source источник


Ответы (2)


Это действительно работает, я просто использовал var вместо val.

class BackgroundSyncWorker (
    appContext: Context,
    workerParams: WorkerParameters
): Worker(appContext, workerParams), KoinComponent {

    val dataSyncRepository : DataSyncRepositoryImpl by inject()

    override fun doWork(): Result {
        return Result.success()
    }
}
person Daniel Sims    schedule 04.08.2019
comment
можно опубликовать конфигурацию основного модуля - person Ashish Chaugule; 13.09.2020
comment
Модуль такой же, как и обычный модуль для Koin - person Daniel Sims; 13.09.2020

Я заметил несколько вещей из вашего кода:

Первая причина, почему это не работает, потому что вам нужно расширить / унаследовать BackgroundSyncWork от KoinComponent, чтобы сделать этот BackgroundSyncWork зависимым от коинов.

class BackgroundSyncWorker (
    appContext: Context,
    workerParams: WorkerParameters
): Worker(appContext, workerParams), KoinComponent {

val database: Database by inject()

    override fun doWork(): Result {
        return Result.success()
    }
}

Во-вторых: также убедитесь, что создание объекта базы данных правильно настроено в модуле koin. Он должен работать без проблем.

person Farruh Habibullaev    schedule 04.08.2019
comment
Да, я получил это ниже :), это была глупая ошибка. Спасибо хоть! - person Daniel Sims; 04.08.2019
comment
Неразрешенная ссылка. Ни один из следующих вариантов не подходит из-за несоответствия типа приемника: - person Ashish Chaugule; 13.09.2020