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 来消除这种依赖关系。
我正在尝试在父 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 来消除这种依赖关系。