我正在使用 Koin 3.2,它具有新的模块包含功能。在里面官方文档 https://insert-koin.io/docs/reference/koin-core/modules#linking-modules-strategies,在讨论模块链接策略时,有这样一段话:
需要注意的一个重要细节是,您也可以使用 include 来添加内部和私有模块 - 这使您可以灵活地在模块化项目中公开哪些内容。
这正是我所需要的,但我在文档的其他地方找不到如何设置仅为父模块提供依赖项的“私有”模块,以便这些子依赖项不可用于注入。例如。:
class SomeNonInjectableClass
class SomeInjectableClass(private val sni : SomeNonInjectableClass)
val privateModule = module {
singleOf(::SomeNonInjectableClass)
}
val publicModule = module {
includes(privateModule)
singleOf(::SomeInjectableClass)
}
在我的主应用程序中,我仅列出公共模块,但 Koin 自动提供所有包含的模块:
startKoin{
androidLogger()
androidContext(this@Main)
modules(publicModule)
}
因此,现在开发人员可以从任何活动中执行此操作:
val foo : SomeInjectableClass by inject() //Ok
val bar : SomeNonInjectableClass by inject() //I don't want this
我希望开发人员无法从私有模块注入不可注入的类。类似匕首2的东西@NonInjectable
标记限定符。
这是可能的还是我应该使用经典 DSL 手动构建我的定义?
据我了解,这个新includes
该功能使得拥有整个模块定义成为可能private
or internal
,不允许您将它们包含到此范围之外的模块中。我想它更多地与控制大型模块化项目中 Koin 模块的创建有关,而不是能够控制开发人员可以或不能注入什么。
private val privateModule = module {
singleOf(::SomeNonInjectableClass)
}
我可以理解,在跨不同 kotlin 模块创建大型 koin 模块组合时,如何将其设为私有范围可以避免一些混乱(特别是私有模块内有很多定义),但同时我也感到沮丧似乎不可能实现你想做的事情。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)