Je développe une application basée sur Koin DI (ver: 1.0.1) avec 2 modules (: app et: network). J'ai une exigence dans: le module réseau d'avoir "Context". Voici comment j'ai implémenté:
**Module**:
val appModule = module {
viewModel { LoginViewModel(get()) }
}
**Activity**:
private val viewModel by viewModel<LoginViewModel>()
**ViewModel**:
class LoginViewModel(val context: Context): ViewModel() {
...
// Send "context" to network class in :network module
...
}
Question: Existe-t-il un moyen d'envoyer directement le contexte à la classe réseau dans: module réseau?
Les réponses de @Rajat et @Andrey sont correctes. En fait, si vous regardez le sources , vous verrez que androidContext()
est juste une fonction d'extension à get()
, donc ces 2 définitions sont identiques:
val appModule = module {
viewModel { LoginViewModel(get()) }
}
...
val appModule = module {
viewModel { LoginViewModel(androidContext()) }
}
Répondre à votre question, puisque get()
et androidContext()
sont membres de l'objet DSL module
, vous pouvez faire ceci:
val networkModule = module {
single { Network(androidContext()) }
}
Ou tout simplement (je préfère celui-ci par souci de concision):
val networkModule = module {
single { Network(get()) }
}
Le contexte d'application est disponible à l'intérieur d'un module via la fonction androidContext()
.
val appModule = module {
viewModel { LoginViewModel(androidContext()) }
}
Cela devrait résoudre votre problème.