
Enhances dependency injection by generating Koin modules from Ktorfit services using a KSP processor, ensuring compile-time safety and supporting KOIN_CONFIG_CHECK for stability. Experimental project.
This ksp processor will find all Ktorfit services and create a Koin module with those. Compiled with Kotlin 2.0.21. Please report compatibility with earlier/later versions.
plugins {
// Add ksp
}
dependencies {
ksp("com.dshatz:ktorfit-koin:1.1.0")
implementation("com.dshatz:ktorfit-koin-lib:1.1.0")
// Also add ktorfit and koin
}interface PriceService {
@GET("https://api.binance.com/api/v3/ticker/price")
suspend fun getCurrentPrice(@Query("symbol") symbol: String): Response
}
@ServiceModule(packageScan = "com.example")
class NetworkModule val module = module {
single<Ktorfit> { Ktorfit.Builder().build() }
}
startKoin {
// networkModule is the Koin module generated by Ktorfit-Koin.
modules(module, networkModule)
} @Single
fun provideKtorfit(): Ktorfit {
return Ktorfit.Builder().build()
}
@Module(includes = [NetworkModule::class])
@ComponentScan(...)
class MyModule
startKoin {
modules(MyModule().module)
}@Single
class PriceRepo(private val priceService: PriceService) {}or
val service: PriceService by get().inject()This library supports KOIN_CONFIG_CHECK.
This project is experimental and was made to address my usecase.
I do aim to make it useful for others, so if your usecase does not work, create an issue with examples, and I'll do my best.
This ksp processor will find all Ktorfit services and create a Koin module with those. Compiled with Kotlin 2.0.21. Please report compatibility with earlier/later versions.
plugins {
// Add ksp
}
dependencies {
ksp("com.dshatz:ktorfit-koin:1.1.0")
implementation("com.dshatz:ktorfit-koin-lib:1.1.0")
// Also add ktorfit and koin
}interface PriceService {
@GET("https://api.binance.com/api/v3/ticker/price")
suspend fun getCurrentPrice(@Query("symbol") symbol: String): Response
}
@ServiceModule(packageScan = "com.example")
class NetworkModule val module = module {
single<Ktorfit> { Ktorfit.Builder().build() }
}
startKoin {
// networkModule is the Koin module generated by Ktorfit-Koin.
modules(module, networkModule)
} @Single
fun provideKtorfit(): Ktorfit {
return Ktorfit.Builder().build()
}
@Module(includes = [NetworkModule::class])
@ComponentScan(...)
class MyModule
startKoin {
modules(MyModule().module)
}@Single
class PriceRepo(private val priceService: PriceService) {}or
val service: PriceService by get().inject()This library supports KOIN_CONFIG_CHECK.
This project is experimental and was made to address my usecase.
I do aim to make it useful for others, so if your usecase does not work, create an issue with examples, and I'll do my best.