[英]How to Inject application context from 'app' module to 'network' module using Koin DI
我正在开发一个基于 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
...
}
问题:有什么办法可以直接把context发送到.network模块中的.network class?
@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()) }
}
应用程序上下文可通过函数androidContext()
在模块内使用。
val appModule = module {
viewModel { LoginViewModel(androidContext()) }
}
这应该可以解决您的问题。
其他注入上下文的方法是使用 Koin 的 Constructor DSL:
val appModule = module {
viewModelOf(::LoginViewModel)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.