如何使用 Koin DI 将应用程序上下文从 'app' 模块注入到 'network' 模块
How to Inject application context from 'app' module to 'network' module using Koin DI
我正在开发一个基于 Koin DI(版本:1.0.1)的应用程序,有 2 个模块(:应用程序和:网络)。我在 :network 模块中要求有 "Context"。以下是我的实现方式:
**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 模块中的网络 class?
通过函数 androidContext()
.
可以在模块内部使用应用程序上下文
val appModule = module {
viewModel { LoginViewModel(androidContext()) }
}
这应该可以解决您的问题。
@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()) }
}
我正在开发一个基于 Koin DI(版本:1.0.1)的应用程序,有 2 个模块(:应用程序和:网络)。我在 :network 模块中要求有 "Context"。以下是我的实现方式:
**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 模块中的网络 class?
通过函数 androidContext()
.
val appModule = module {
viewModel { LoginViewModel(androidContext()) }
}
这应该可以解决您的问题。
@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()) }
}