定义 '[Single:'com.example.handlers.SocketHandler']' 尝试覆盖现有定义 koin android



我有一个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']'
Koin不知道要检索哪个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"))

最新更新