如何使用 Koin 依赖注入 (Kotlin) 检索与给定类型匹配的所有实例
How to retrieve all instances that matches a given type using Koin Dependency Injection (Kotlin)
如何使用 Koin DI 实现以下目标:
single { AValidator() } bind IValidator::class
single { BValidator() } bind IValidator::class
single { CValidator() } bind IValidator::class
single { DValidator() } bind IValidator::class
在我想要注入所有验证器的 class 中,我使用以下内容:
val validators: List<IValidator> by inject()
期望接口 IValidator
的所有不同实现都被自动注入。
我知道 Kodein 实际上支持它,您只需执行以下操作:
val validators: List<IValidator> by kodein.allInstances()
很想知道这在 Koin 中是否可行。
谢谢!
根据文档,我可以执行如下操作:
single(name = "validators") {
listOf(AValidator(), BValidator(), CValidator(), DValidator())
}
并通过以下方式检索:
val validators: List<IValidator> by inject(name = "validators")
它现在可以工作,但是注入上面列表中的单个验证器将不起作用。
更多详情:https://insert-koin.io/docs/1.0/documentation/reference/index.html
欢迎添加其他解决方案!
使用 Koin 2+,您现在可以单独声明您的实例
single { AValidator() } bind IValidator::class
single { BValidator() } bind IValidator::class
single { CValidator() } bind IValidator::class
single { DValidator() } bind IValidator::class
然后用getAll<TInterface>
请求全部
val validators: List<IValidator> = getKoin().getAll()
// with lazy
val validators: List<IValidator> by lazy { getKoin().getAll<IValidator>() }
并使用bind<TInterface, TImplementation>
请求单个实例
val validator: IValidator = getKoin().bind<IValidator, AValidator>()
来源
https://start.insert-koin.io/#/getting-started/modules-definitions?id=additional-types
如何使用 Koin DI 实现以下目标:
single { AValidator() } bind IValidator::class
single { BValidator() } bind IValidator::class
single { CValidator() } bind IValidator::class
single { DValidator() } bind IValidator::class
在我想要注入所有验证器的 class 中,我使用以下内容:
val validators: List<IValidator> by inject()
期望接口 IValidator
的所有不同实现都被自动注入。
我知道 Kodein 实际上支持它,您只需执行以下操作:
val validators: List<IValidator> by kodein.allInstances()
很想知道这在 Koin 中是否可行。
谢谢!
根据文档,我可以执行如下操作:
single(name = "validators") {
listOf(AValidator(), BValidator(), CValidator(), DValidator())
}
并通过以下方式检索:
val validators: List<IValidator> by inject(name = "validators")
它现在可以工作,但是注入上面列表中的单个验证器将不起作用。
更多详情:https://insert-koin.io/docs/1.0/documentation/reference/index.html
欢迎添加其他解决方案!
使用 Koin 2+,您现在可以单独声明您的实例
single { AValidator() } bind IValidator::class
single { BValidator() } bind IValidator::class
single { CValidator() } bind IValidator::class
single { DValidator() } bind IValidator::class
然后用getAll<TInterface>
请求全部
val validators: List<IValidator> = getKoin().getAll()
// with lazy
val validators: List<IValidator> by lazy { getKoin().getAll<IValidator>() }
并使用bind<TInterface, TImplementation>
请求单个实例
val validator: IValidator = getKoin().bind<IValidator, AValidator>()
来源
https://start.insert-koin.io/#/getting-started/modules-definitions?id=additional-types