我正在使用 Koin 3.2 版本,该版本具备了新的模块包含特性。在官方文档中,在讨论模块链接策略时,有以下这段话:
这正是我所需要的,然而我没有找到其他文档中如何设置“私有”模块的方法,该模块仅为父模块提供依赖项,以便这些子依赖项不可用于注入。例如:值得注意的一点是:您可以使用 includes 添加内部和私有模块,从而灵活地控制在模块化项目中暴露哪些内容。
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?