如何使用Koin DI实现以下功能:
single { AValidator() } bind IValidator::class
single { BValidator() } bind IValidator::class
single { CValidator() } bind IValidator::class
single { DValidator() } bind IValidator::class
在我想要注入所有验证器的类中,我使用以下代码:
val validators: List<IValidator> by inject()
期望接口IValidator
的所有不同实现都被自动注入。
我知道这在Kodein中实际上是支持的,在那里您只需执行以下操作:val validators: List<IValidator> by kodein.allInstances()
很想知道这在Koin内部是否可能。
谢谢!
3条答案
按热度按时间ubby3x7f1#
使用Koin2+,现在可以单独声明示例
然后使用
getAll<TInterface>
请求所有这些文件并使用
bind<TInterface, TImplementation>
请求单个示例来源
https://start.insert-koin.io/#/getting-started/modules-definitions?id=additional-types
t2a7ltrp2#
根据文档,我可以执行如下操作:
并通过以下方式检索:
它现在可以工作,但是注入上面列表中的单个验证器就不行了。
有关详细信息:https://insert-koin.io/docs/1.0/documentation/reference/index.html
请随意添加其他解决方案!
sczxawaw3#
内置的Koin
getAll()
也不适合我,不管是什么版本。所以它要么是一个持续多年的bug,要么是糟糕的文档。然而,这是我的自定义解决方案,koin版本3.3.0
。然后像这样提供