Коин: как делить экземпляры классов между областями действия - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь разделить экземпляр служебного класса между родительским действием и областью действия дочернего фрагмента. Здравый смысл сказал бы мне, что, поскольку фрагмент находится в пределах действия действия, я должен иметь возможность каким-то образом получить доступ к этой утилите. Поэтому мое определение модуля будет выглядеть так:

internal val DemoModule = module {

    scope<DemoActivity> {

        scoped <DemoEncryptionHandler>{ DemoEncryptionHandler(androidContext()) }

        scope<DemoEncryptionFragment> {
            viewModel { DemoViewModel(get() /* shared instance of DemoEncryptionHandler */) }
        }
    }
}

Когда я запускаю это, я получаю следующую ошибку:

org.koin.core.error.NoBeanDefFoundException: No definition found for class:'com.sample.test.DemoEncryptionHandler'. Check your definitions! 

Так что очевидно, что это должно быть сделано по-другому. Куда я иду не так?

1 Ответ

0 голосов
/ 21 января 2020

Так что, очевидно, это не может быть сделано. Я также пытался добавить эту функцию в качестве функции расширения, но способ построения и настройки областей действия означает, что это немного сложнее, чем это. С другой стороны, можно связать области видимости из версии Koin "2.1.0 alpha". Итак, что я сделал сейчас - объявил мой модуль, как указано выше. Затем я связываю свои области видимости во фрагменте следующим образом:

lifecycleScope.linkTo(requireActivity().lifecycleScope)

Кажется, это работает просто отлично, хотя он добавляет зависимость между фрагментом и его активностью хоста, которую я надеялся устранить с помощью Koin.

...