Skip to content

Instantly share code, notes, and snippets.

View arnaudgiuliani's full-sized avatar

Arnaud Giuliani arnaudgiuliani

View GitHub Profile
// generated sources
import org.koin.ksp.generated.*
fun main(){
startKoin {
modules(CoffeeAppModule().module)
}
}
@Module
@ComponentScan("org.koin.sample.coffee")
class CoffeeAppModule
@Single
class ElectricHeater : Heater
@Single
class Thermosiphon(private val heater: Heater) : Pump
@Single
class CoffeeMaker(private val pump: Pump, private val heater: Heater)
val dataModule = module {
// data components definitions
}
val featureModule1 = module {
includes(dataModule)
// feature1 definitions
}
val featureModule2 = module {
includes(dataModule)
// feature2 definitions
class ClassA(val b : ClassB)
class ClassB()
module {
singleOf(::ClassA)
singleOf(::ClassB)
}
class MyAdapter(val presenter : MyPresenter)
module {
scope<MyActivity> {
// get MyPresenter instance from current scope
scoped { MyAdapter(get()) }
scoped { MyPresenter() }
}
}
class MyActivity : AppCompatActivity, AndroidScopeComponent {
// use Activity Retained Scope
override val scope : Scope by activityRetainedScope()
val presenter : MyPresenter by inject()
}
module {
viewModel { MyViewModel() }
}
class MyActivity : AppCompatActivity() {
val myViewModel : MyViewModel by viewModel()
}
class MyActivity : AppCompatActivity, AndroidScopeComponent {
// get current Activity's scope
override val scope : Scope by activityScope()
// MyPresenter is resolved from MyActivity's scope
val presenter : MyPresenter by inject()
}
module {
// Declare a scope for MyActivity
scope<MyActivity> {
scoped { MyPresenter() }
}
}
class MyActivity : ScopeActivity() {
val presenter : MyPresenter by inject()
}