我目前正在尝试在我的Android应用中实现Koin。它可以在我可以访问get()
或inject()
的活动中正常运行,但是在这些类之外,我无法使用它们。
例如,我有一个非常简单的类,名为Device
,它将仅创建用户设备的对象。我需要在其中引用MyStorage
。
data class Device(
val username: String,
...
) {
companion object {
fun get(): Device {
val storage: MyStorage = get() // does not work
val username = storage.username
return Device(
username,
...
)
}
}
}
但是get()
在此类中不起作用,并且手动添加导入无济于事。
我也看到了这个答案https://stackoverflow.com/a/49629378/3106174,它扩展了KoinComponent
,但是在这种情况下或我遇到的其他问题(例如,任何类之外的顶级函数)都无效。
任何提示将不胜感激。谢谢。
答案 0 :(得分:1)
好吧,我会考虑通过依赖注入来制作Device
对象,它可以接受在构造函数中注入的MyStorage
。
val appModule = module {
factory { Device(get()) } // MyStorage injected using get()
}
但是,如果它不适合您的需求,请尝试从MyStorage
对象(例如,从ComponentCallbacks
对象中获取Application
。
class App : Application() {
companion object {
private lateinit var instance: App
fun get(): App = instance
}
override fun onCreate() {
super.onCreate()
instance = this
}
fun getMyStorage(): MyStorage {
return get()
}
}
fun get(): Device {
val storage: MyStorage = App.get().getMyStorage()
...
}