ViewModel 单例与 Koin

问题描述 投票:0回答:1

我尝试注入的对象之一捕获 lambda 中的引用。该 lambda 用作更新我的 viewModel 的回调。我如何使用 koin 来注入该对象?

不使用依赖注入的工作代码:

private val viewModel: MyViewModel by viewModel()
private val barcodeDataReceiver =
    BarcodeDataReceiver {
        viewModel.addItem(it)
    }

理想情况下,我希望使用

BarcodeDataReceiver
创建我的
koin
,但是当我使用
get<MyViewModel>()
时,我会得到
MyViewModel
的新实例。我知道
koin
viewModel { }
是一个工厂,但是有什么办法获得单例吗?

我尝试用

viewModel { }
包裹
single { }
,但这不起作用。

android kotlin viewmodel koin android-koin
1个回答
0
投票

我不确定您是否已经找到问题的答案,但由于还没有答案,我将分享我找到的解决方案:

使用 Koin,可以像使用单个声明的任何其他对象一样将 ViewModel 创建为单例,无论它是完整的

single{SingletonViewModel(get())}
,使用 get() 可以接收 ViewModel 构造函数参数

或速记声明

singleOf(::SingletonViewModel)

并使用

koinInject<SingletonViewModel>()
注入代码中。

我在 KMM 应用程序中测试了这种方法,确实得到了相同的数据模型。我相信这也适用于纯 Android 应用程序。

© www.soinside.com 2019 - 2024. All rights reserved.