class CoffeeMaker(val pump: Pump, val heater: Heater) val coffeeMakerModule = module { single { CoffeeMaker(get(),get()) } single<Pump>{ Thermosiphon(get()) } single<Heater> { ElectricHeater() } } * also multi modules
class CoffeeMaker(val pump: Pump, val heater: Heater) val coffeeMaker = module { single { CoffeeMaker(get(),get()) } } val coffeeParts = module { single<Pump>{ Thermosiphon(get()) } single<Heater> { ElectricHeater() } } * also multi modules
// will create MyPresenter on each call factory { MyPresenter(get()) } } class MyActivity : AppCompatActivity() { // new instance on each call val presenter: MyPresenter by inject() }
// use injection parameter to get state viewModel { (handle: SavedStateHandle, id: String) -> StateViewModel(handle, id, get()) } // Provide initial state as parameter class MVVMActivity : AppCompatActivity() { val mySavedVM: StateViewModel by viewModel { parametersOf(Bundle(), "vm1") } }
id: String, val service: SimpleService) : ViewModel() // use injection parameter to get state viewModel { (handle: SavedStateHandle) -> StateViewModel(handle, id, get()) } // Provide initial state as parameter class MVVMActivity : AppCompatActivity() { val mySavedVM: StateViewModel by viewModel { parametersOf(Bundle(), "vm1") } }
id: String, val service: SimpleService) : ViewModel() // use injection parameter to get state viewModel { (handle: SavedStateHandle, id: String) -> StateViewModel(handle, id, get()) } // Provide initial state as parameter class MVVMActivity : AppCompatActivity() { val mySavedVM: StateViewModel by viewModel { parametersOf(Bundle()) } }
Fragment() // Declare your fragment val module = module { single { Session() } fragment { MyFragment(get()) } } // Setup in Activity class MyMActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { // setup factory setupKoinFragmentFactory() super.onCreate(savedInstanceState)
Fragment() // Declare your fragment val module = module { single { Session() } fragment { MyFragment(get()) } } // Setup in Activity class MyMActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { // setup factory setupKoinFragmentFactory() super.onCreate(savedInstanceState)
Heater module { single<Pump>{ Thermosiphon(get()) } single<Heater> { ElectricHeater() } } Dependency Injection - Constructor injection configured via Koin DSL - Your classes are not dependant to Koin API - Instances are called by Koin Container - Functional DSL Configuration: parameters, context, scopes…
val coffeeMaker : CoffeeMaker by inject() } Service Locator class CoffeeApp { lateinit var coffeeMaker : CoffeeMaker init { // ask injection of setters DI.inject(this) } } Setter Injection