8. Module
// Given some classes
class Controller(val service : BusinessService)
class BusinessService()
// just declare it
val myModule = module {
factory { Controller(get()) }
single { BusinessService() }
}
9. inject
class MyActivity() : AppCompatActivity() {
// lazy inject BusinessService into property
val service : BusinessService by inject()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// or directly get any instance
val service : BusinessService = get()
}
}
10. Start koin
class MyApplication : Application() {
override fun onCreate(){
super.onCreate()
// start Koin!
startKoin(this, listOf(myModule))
}
}
13. Inject viewmodel
// declare ViewModel using the viewModel keyword
val myModule : Module = module {
viewModel { MyViewModel(get()) }
single { MyRepository() }
}
14. Inject viewmodel
class MyActivity() : AppCompatActivity() {
// lazy inject MyViewModel
val vm : MyViewModel by viewModel()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// or directly get
val vm : MyViewModel = getViewModel()
}
}
15. Inject viewmodel
class MyActivity() : AppCompatActivity() {
// lazy inject MyViewModel
val vm : MyViewModel by viewModel()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// or directly get
val vm : MyViewModel = getViewModel()
}
}
16. Type inference
class Controller(val service : BusinessService)
interface BusinessService {}
class LocalBusinessService() : BusinessService
val myModule = module {
factory { Controller(get()) }
single { LocalBusinessService() }
}
17. Type inference
class Controller(val service : BusinessService)
interface BusinessService {}
class LocalBusinessService() : BusinessService
val myModule = module {
factory { Controller(get()) }
single { LocalBusinessService() }
//crash!!
}
18. Type inference
class Controller(val service : BusinessService)
interface BusinessService {}
class LocalBusinessService() : BusinessService
val myModule = module {
factory { Controller(get()) }
single { LocalBusinessService() as BusinessService }
}
19. Type inference
class Controller(val service : BusinessService)
interface BusinessService {}
class LocalBusinessService() : BusinessService
val myModule = module {
factory { Controller(get()) }
single { LocalBusinessService() as BusinessService }
//or
single<BusinessService> { LocalBusinessService() }
}