【发布时间】:2022-08-22 22:59:23
【问题描述】:
我正在使用具有新模块包含功能的 Koin 3.2。在official docs中,在讨论模块链接策略时,有这么一段:
需要注意的一个重要细节是,您也可以使用包含来添加内部和私有模块 - 这使您可以灵活地在模块化项目中公开哪些内容。
这正是我所需要的,但我无法在文档的其他地方找到如何设置一个只为父模块提供依赖项的“私有”模块,这样那些子依赖项就不能用于注入。例如。:
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我希望开发人员不能从私有模块中注入不可注入的类。类似于 Dagger 2 的
@NonInjectable标记限定符。这是可能的还是我应该求助于使用经典 DSL 手动构建我的定义?
标签: android kotlin dependency-injection koin