如何使用 Koin 注入数据 class?

How to inject data class using Koin?

当我的应用程序启动时,我用一些数据创建对象,我想在 services/viewModels 之间共享相同的对象实例。

是否可以使用 Koin 将相同的数据实例 class 注入 viewModel?

编辑: 当应用程序在启动时从 firebase 加载数据时,我在 MainViewModel 中创建了用户对象。

@IgnoreExtraProperties
@Keep
data class User(
    val id: String = "",
    val name: String? = null,
    val surname: String? = null,
    val email: String? = null,
    val avatarUrl: String? = null
)

我会创建一个 holder 对象,比如说 UserManager,来保存一个可选的 User 实例。这个 holder 是你可以在你的 koin 图中作为 single 提供的东西,任何负责设置 User 实例的组件(例如你的 MainViewModel)都可以更新单例 holder 内的实例。

如果您的视图模型继承自 KoinComponent,您可以访问 getKoin 方法来声明您的用户对象。

class MainViewModel : ViewModel(), KoinComponent {

用户对象将在声明后可供应用程序的其余部分使用。

// user created from data from firebase ...

fun insertKoinFor(user: User) {
    // declare koin the user of type User
    getKoin().declare<User>(user)

    // or declare with a named qualifier
    getKoin().declare(user, named("myUser"))
}

希望对您有所帮助。