web-dev-qa-db-fra.com

Comment injecter le contexte d'application du module «application» au module «réseau» à l'aide de Koin DI

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?

11
user2064275

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()) }
}
18
maslick

Le contexte d'application est disponible à l'intérieur d'un module via la fonction androidContext() .

5
Andrey Ilyunin
val appModule = module {
    viewModel { LoginViewModel(androidContext()) }
}

Cela devrait résoudre votre problème.

1
Rajat Beck