Старайтесь не создавать val
для контекста applicationAndroid()
, но используйте его непосредственно внутри фабричного / одиночного замыкания в качестве параметра для одной из ваших зависимостей.То, что я делаю в моем проекте, выглядит примерно так:
val appModule = module(override = true) {
factory<Navigator> { MyNavigator(androidApplication()) }
}
, где класс MyNavigator:
class MyNavigator(private val context: Context): Navigator {
override fun goToDetail(detailId: String) {
context.startActivity(DetailActivity.getIntent(context, detailId))
}
}
ps: я также провел несколько экспериментов с Koin 1.0.0, и я заметил, что вы также можете написать что-то вроде:
val appModule = module(override = true) {
factory<Navigator> { MyNavigator(get()) }
}
что get()
будет получать для вас контекст, даже если в графе нет зависимости для экземпляра Context;ни фабрика, ни синглтон.Возможно, что Коин делает что-то за кулисами.Я пытался использовать его с различными типами зависимостей, и он всегда работает.