如何使用Koin DI将应用程序上下文从“应用程序”模块注入到“网络”模块

use*_*275 12 android koin

我正在开发基于带有2个模块(:app和:network)的Koin DI(ver:1.0.1)的应用程序。我在: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
  ...
 }
Run Code Online (Sandbox Code Playgroud)

问题:有什么方法可以将上下文直接发送到:network模块中的网络类?

mas*_*ick 20

@Rajat和@Andrey的两个答案都是正确的。实际上,如果您查看源代码,您将看到androidContext()仅仅是的扩展函数get(),因此这两个定义是相同的:

val appModule = module {
    viewModel { LoginViewModel(get()) }
}
Run Code Online (Sandbox Code Playgroud)

...

val appModule = module {
    viewModel { LoginViewModel(androidContext()) }
}
Run Code Online (Sandbox Code Playgroud)

回答您的问题,由于get()androidContext()moduleDSL对象的成员,您可以这样做:

val networkModule = module {
   single { Network(androidContext()) }
}
Run Code Online (Sandbox Code Playgroud)

或简单地(为简洁起见,我更喜欢此):

val networkModule = module {
   single { Network(get()) }
}
Run Code Online (Sandbox Code Playgroud)


Raj*_*eck 6

val appModule = module {
    viewModel { LoginViewModel(androidContext()) }
}
Run Code Online (Sandbox Code Playgroud)

这应该可以解决您的问题。


And*_*nin 5

通过该功能可以在模块内部使用应用程序上下文androidContext()

  • 链接已损坏。 (2认同)