Как внедрить контекст приложения из модуля «приложение» в модуль «сеть» с помощью Koin DI - PullRequest
0 голосов
/ 23 ноября 2018

Я занимаюсь разработкой приложения на основе Koin DI (версия: 1.0.1) с 2 модулями (: app и: network).У меня есть требование в: сетевом модуле иметь «Контекст».Ниже описано, как я реализовал:

**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
  ...
 }

Вопрос: есть ли способ напрямую передать контекст сетевому классу в: сетевой модуль?

Ответы [ 3 ]

0 голосов
/ 03 января 2019
val appModule = module {
    viewModel { LoginViewModel(androidContext()) }
}

Это должно решить вашу проблему.

0 голосов
/ 04 января 2019

Оба ответа @Rajat и @Andrey верны.Фактически, если вы посмотрите на sources , вы увидите, что androidContext() - это просто функция расширения для get(), поэтому эти 2 определения идентичны:

val appModule = module {
    viewModel { LoginViewModel(get()) }
}

...

val appModule = module {
    viewModel { LoginViewModel(androidContext()) }
}

Отвечая на ваш вопрос, поскольку get() и androidContext() являются членами объекта module DSL, вы можете сделать это:

val networkModule = module {
   single { Network(androidContext()) }
}

Или просто (Iпредпочитаю этот для краткости):

val networkModule = module {
   single { Network(get()) }
}
0 голосов
/ 04 декабря 2018

Контекст приложения доступен внутри модуля через функцию androidContext().

...