Koin:如何在范围之间共享 class 个实例

Koin: how to share class instances between scopes

我正在尝试在父 activity 和子片段范围之间共享实用程序 class 的实例。常识会告诉我,因为该片段在 activity 的范围内,所以我应该能够以某种方式访问​​该实用程序。因此,我的模块定义如下所示:

internal val DemoModule = module {

    scope<DemoActivity> {

        scoped <DemoEncryptionHandler>{ DemoEncryptionHandler(androidContext()) }

        scope<DemoEncryptionFragment> {
            viewModel { DemoViewModel(get() /* shared instance of DemoEncryptionHandler */) }
        }
    }
}

当我 运行 这个但是我得到以下错误:

org.koin.core.error.NoBeanDefFoundException: No definition found for class:'com.sample.test.DemoEncryptionHandler'. Check your definitions! 

很明显,必须以不同的方式进行。我哪里错了?

显然这是不可能做到的。我还尝试将此功能添加为扩展功能,但范围的构建和配置方式意味着它比这要难一些。另一方面,可以 link 来自 Koin 版本“2.1.0 alpha”的范围。 所以我现在所做的就是如上所述声明我的模块。然后我 link 我在片段中的范围是这样的:

lifecycleScope.linkTo(requireActivity().lifecycleScope)

这似乎工作得很好,尽管它在片段和它的主机之间添加了依赖关系 activity,我希望通过使用 Koin 来消除这种依赖关系。