Skip to content

tnainani/koin

 
 

logo

What is KOIN?

A pragmatic lightweight dependency injection framework for Kotlin developers.

Written in pure Kotlin, using functional resolution only: no proxy, no code generation, no reflection.

Koin is a DSL, a light container and a pragmatic API

Official Website 👉 https://insert-koin.io

Latest News 🌐

Getting Help 🚒

Documentation:

Any question about Koin usage?

Articles, Videos & other resources 🎉

Online resources about Koin - Talking about Koin

Reporting issues 🚑

Found a bug or a problem on a specific feature? Open an issue on Github issues

Contributing 🛠

Want to help or share a proposal about Koin? problem on a specific feature?

  • Open an issue to explain the issue you want to solve Open an issue
  • Come talk on slack #koin-dev channel
  • After discussion to validate your ideas, you can open a PR or even a draft PR if the contribution is a big one Current PRs

Additional readings about basic setup: https://github.com/InsertKoinIO/koin/blob/master/CONTRIBUTING.adoc

Setup

Current Version

// latest stable koin_version = '2.1.5'

Gradle

Jcenter

Check that you have the jcenter repository.

// Add Jcenter to your repositories if needed repositories {	jcenter() }

Dependencies

Pick one of your Koin dependency:

Gradle Plugin

buildscript { repositories { jcenter() } dependencies { classpath "org.koin:koin-gradle-plugin:$koin_version" } } apply plugin: 'koin'

Core features

// Koin for Kotlin implementation "org.koin:koin-core:$koin_version" // Koin extended & experimental features implementation "org.koin:koin-core-ext:$koin_version" // Koin for Unit tests testImplementation "org.koin:koin-test:$koin_version" // Koin for Java developers is now part of core // implementation "org.koin:koin-java:$koin_version"

Android

// Koin for Android implementation "org.koin:koin-android:$koin_version" // Koin Android Scope features implementation "org.koin:koin-android-scope:$koin_version" // Koin Android ViewModel features implementation "org.koin:koin-android-viewmodel:$koin_version" // Koin Android Experimental features implementation "org.koin:koin-android-ext:$koin_version"

AndroidX

// Koin AndroidX Scope features implementation "org.koin:koin-androidx-scope:$koin_version" // Koin AndroidX ViewModel features implementation "org.koin:koin-androidx-viewmodel:$koin_version" // Koin AndroidX Fragment features implementation "org.koin:koin-androidx-fragment:$koin_version" // Koin AndroidX Experimental features implementation "org.koin:koin-androidx-ext:$koin_version"

Ktor

// Koin for Ktor Kotlin implementation "org.koin:koin-ktor:$koin_version"

Quickstart

Declare a Koin module

Write with the Koin DSL what you need to assemble:

// Given some classes  class Controller(val service : BusinessService) class BusinessService() // just declare it  val myModule = module { single { Controller(get()) } single { BusinessService() } } 

Starting Koin

Use the startKoin() function to start Koin in your application.

In a Kotlin app:

fun main(vararg args : String) { // start Koin! startKoin { // your modules modules(myModule) } } 

In an Android app:

class MyApplication : Application() { override fun onCreate(){ super.onCreate() // start Koin! startKoin { // Android context androidContext(this@MyApplication) // modules modules(myModule) } } } 

Talking about Koin

Articles

Videos & Podcasts

Koin Developers Hub

Contributors

This project exists thanks to all the people who contribute. [Contribute].

OpenCollective

Backers on Open Collective Sponsors on Open Collective

Backers

Thank you to all our backers! 🙏 [Become a backer]

Sponsors

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]

About

Koin - a pragmatic lightweight dependency injection framework for Kotlin

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Kotlin 95.5%
  • HTML 1.6%
  • Java 1.6%
  • Other 1.3%