我有像
这样的顶级功能fun sendNotification(context:Context, data:Data) {
...//a lot of code here
}
该功能创建通知,有时通知可以包含图像,所以我必须下载它。我使用Glide,它被包裹在接口ImageManager上,所以我必须注入它。我使用Koin作为DI,问题是我不能写
val imageManager: ImageManager by inject()
在我的代码中的某处,因为没有实现KoinComponent接口的东西。
最明显的解决方案是将已注入其他地方imageManager
作为函数参数传递但我不想这样做,因为在大多数情况下我不需要imageManager
:它取决于{的类型{1}}参数。
答案 0 :(得分:9)
最简单的方法是创建KoinComponent
对象作为包装,然后从中获取变量:
val imageManager = object:KoinComponent {val im: ImageManager by inject()}.im
最好通过某种功能来包装它,例如我使用
inline fun <reified T> getKoinInstance(): T {
return object : KoinComponent {
val value: T by inject()
}.value
}
因此,如果我需要实例,我只需编写
val imageManager:ImageManager = getKoinInstance()
或
val imageManager = getKoinInstance<ImageManager>()
答案 1 :(得分:0)
我是以这种方式完成的
fun Route.general() {
val repo: OperationRepo by lazy { GlobalContext.get().koin.get() }
...
}