Koin不知道要检索哪个
我有一个SocketHandler接口和另外两个实现该接口的类。我想在几个处理程序中实现这个接口,并通过koin注入它们。
interface SocketHandler {
fun onReceive(socketResponses: Enums.SocketResponses, callback: (item: String) -> Unit)
}
class ClassAHandlerImpl : SocketHandler, KoinComponent {
override fun onReceive(
socketResponses: Enums.SocketResponses, callback: (item: String) -> Unit
) {
....
}
}
class ClassBHandlerImpl: SocketHandler, KoinComponent {
override fun onReceive(
socketResponses: Enums.SocketResponses, callback: (item: String) -> Unit
) {
....
}
}
以及这些类的Koin模块实现
val handlersModule = module {
single<SocketHandler> {
return@single ClassAHandlerImpl()
}
single<SocketHandler> {
return@single ClassBHandlerImpl()
}
...
}
然而,我得到了一个异常
Caused by: org.koin.core.error.DefinitionOverrideException: Definition '[Single:'com.example.handlers.SocketHandler']' try to override existing definition. Please use override option or check for definition '[Single:'com.example.handlers.SocketHandler']'
SocketHandler
实例,因为它在模块中定义了两次。
您应该使用命名参数:
val handlersModule = module {
single<SocketHandler>(named("SocketHandlerA")) {
return@single ClassAHandlerImpl()
}
single<SocketHandler>(named("SocketHandlerB")) {
return@single ClassBHandlerImpl()
}
...
}
然后你可以在你的类中注入:
private val socketHandler by inject<SocketHandler>(named("SocketHandlerA"))