Extension Manager
Here is a brief description of KoinExtension manager, dedicated to add new features inside Koin framework.
Defining an extension
A Koin extension consist in having a class inheriting from KoinExtension interface:
interface KoinExtension {
var koin : Koin
fun onClose()
}
this interface allow to ensure you get passed a Koin instance, and the extension is called when Koin is closing.
Starting an extension
To start an extension, just extend the right place of the system, and register it with Koin.extensionManager.
Below here is how we define the coroutinesEngine extension:
fun KoinApplication.coroutinesEngine() {
with(koin.extensionManager) {
if (getExtensionOrNull<KoinCoroutinesEngine>(EXTENSION_NAME) == null) {
registerExtension(EXTENSION_NAME, KoinCoroutinesEngine())
}
}
}
Below here is how we call the coroutinesEngine extension:
val Koin.coroutinesEngine: KoinCoroutinesEngine get() = extensionManager.getExtension(EXTENSION_NAME)