koin-annotations icon indicating copy to clipboard operation
koin-annotations copied to clipboard

Receiver injection in extension functions

Open Aaur1s opened this issue 6 months ago • 2 comments

Describe the bug When using @Single with extension function koin-annotations generates invalid code, ignoring the reciever.

To Reproduce Steps to reproduce the behavior:

  1. Create module with @Module
  2. Create function with any receiver
  3. Build project
  4. See error.

Current behavior module definition:

@Module @ComponentScan ServerDI

@Single(createdAtStart = true)
fun Kord.handleGuildJoin() = on<GuildCreateEvent> {

}

Generated module code (invalid):

package org.koin.ksp.generated

import org.koin.core.module.Module
import org.koin.dsl.bind
import org.koin.dsl.module


public val dev_aaur1s_portaler_server_ServerDI : Module get() = module {
	single(createdAtStart=true) { _ -> dev.aaur1s.portaler.server.handleGuildJoin() } bind(kotlinx.coroutines.Job::class)
}
public val dev.aaur1s.portaler.server.ServerDI.module : org.koin.core.module.Module get() = dev_aaur1s_portaler_server_ServerDI

Expected behavior module definition is same Generated module code (correct):

package org.koin.ksp.generated

import dev.aaur1s.portaler.server.handleGuildJoin
import dev.kord.core.Kord
import org.koin.core.module.Module
import org.koin.dsl.bind
import org.koin.dsl.module


public val dev_aaur1s_portaler_server_ServerDI : Module get() = module {
	single(createdAtStart=true) { _ -> get<Kord>().run { handleGuildJoin() } } bind(kotlinx.coroutines.Job::class)
}
public val dev.aaur1s.portaler.server.ServerDI.module : org.koin.core.module.Module get() = dev_aaur1s_portaler_server_ServerDI

Koin project used and used version: kotlin: 2.2.0-RC koin: 4.0.4 koin-annotations: 2.0.1-RC1 ksp: 2.2.0-RC-2.0.1

Afterwords With upcoming context parameters in kotlin context parameters injection would be really cool

Aaur1s avatar May 26 '25 10:05 Aaur1s