android - 如何使用 Koin DI 将应用程序上下文从“app”模块注入“network”模块
问题描述
我正在开发一个基于 Koin DI(版本:1.0.1)的应用程序,带有 2 个模块(:app 和:network)。我在 :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
...
}
问题:有什么方法可以直接将上下文发送到 :network 模块中的网络类?
解决方案
@Rajat 和 @Andrey 的两个答案都是正确的。实际上,如果您查看sources,您会发现这androidContext()
只是 的扩展函数get()
,因此这两个定义是相同的:
val appModule = module {
viewModel { LoginViewModel(get()) }
}
...
val appModule = module {
viewModel { LoginViewModel(androidContext()) }
}
回答您的问题,因为get()
和androidContext()
是module
DSL 对象的成员,您可以这样做:
val networkModule = module {
single { Network(androidContext()) }
}
或者简单地说(为了简洁起见,我更喜欢这个):
val networkModule = module {
single { Network(get()) }
}
推荐阅读
- docker - 在 ubuntu 的 docker 上运行 filebeat
- sublimetext3 - 展开后是否可以使用侧按钮标记文本以进一步折叠/展开?
- vue.js - 获取Vuetify多选组件中单击项目的值
- ode - Maxima ODE求解器无法求解逻辑方程?
- android - 未知的命令行选项'--variant'
- actions-on-google - 如何在 Google Home 设备上测试我的操作
- angular - 如何在Angular中从外部调用组件的功能
- python - 如何为标签列表制作“滚动条”?蟒蛇 tkinter
- python - 使用 NumExpr 提升 NumPy 代码的运行时间:分析
- c++ - clang-cl 和 CMAKE