1

我目前正在尝试将Koin实现到我的 Android 应用程序中。它在我可以访问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,但在这种情况下或我遇到的其他情况下不起作用,例如任何类之外的顶级函数。

任何提示将非常感谢。谢谢。

4

1 回答 1

3

好吧,我也会考虑Device通过依赖注入来制作对象,它可以接受MyStorage在构造函数中注入。

val appModule = module {

    factory { Device(get()) }    // MyStorage injected using get()

}

但如果它不适合您的需要,请尝试MyStorageComponentCallbacks对象获取(例如从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()

    ...
}
于 2019-02-28T11:05:55.493 回答