作者:素手红裳000_367 | 来源:互联网 | 2022-11-28 17:11
我正在开发基于带有2个模块(:app和:network)的Koin DI(ver:1.0.1)的应用程序。我在:network模块中具有“上下文”的要求。以下是我的实现方式:
**Module**:
val appModule = module {
viewModel { LoginViewModel(get()) }
}
**Activity**:
private val viewModel by viewModel()
**ViewModel**:
class LoginViewModel(val context: Context): ViewModel() {
...
// Send "context" to network class in :network module
...
}
问题:有什么方法可以将上下文直接发送到:network模块中的网络类?
1> maslick..:
@Rajat和@Andrey的两个答案都是正确的。实际上,如果您查看源代码,您将看到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()) }
}
2> Andrey Ilyun..:
通过该功能可以在模块内部使用应用程序上下文androidContext()
。