Inject instances
Once you have declared some modules and you have started Koin, how can you retrieve your instances in your Android Activity Fragments or Services?
Activity, Fragment & Service as KoinComponents
Activity, Fragment & Service are extended with the KoinComponents extension. You gain access to:
by inject()
- lazy evaluated instance from Koin containerget()
- eager fetch instance from Koin container
For a module that declares a 'presenter' component:
val androidModule = module {
// a factory of Presenter
factory { Presenter() }
}
We can declare a property as lazy injected:
class DetailActivity : AppCompatActivity() {
// Lazy injected Presenter instance
override val presenter : Presenter by inject()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ...
}
Or we can just directly get an instance:
class DetailActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Retrieve a Presenter instance
val presenter : Presenter = get()
}
Need inject() and get() anywhere else?
If you need to inject()
or get()
an instance from another class, just tag it with KoinComponent
interface.