Koin - 一個(gè)基于Kotlin語(yǔ)言智能的依賴注入框架彼哼,讓你專注于應(yīng)用開(kāi)發(fā)而不是工具使用齿诉。
本教程可以讓你使用Koin框架寫(xiě)一個(gè)可以注入和調(diào)用你的組件的Kotlin應(yīng)用拒炎。
框架引入
首先祖今,將koin-core
在Gradle文件中引入如下:
// Add Jcenter to your repositories if needed
repositories {
jcenter()
}
dependencies {
// Koin for Kotlin apps
compile "org.koin:koin-core:$koin_version"
// Testing
testCompile "org.koin:koin-test:$koin_version"
}
應(yīng)用開(kāi)發(fā)
在我們的實(shí)例應(yīng)用中暴区,我們要定義一下兩個(gè)組件:
- HelloMessageData - 持有數(shù)據(jù)
- HelloService - 使用和展示HelloMessageData的數(shù)據(jù)
- HelloApplication - 調(diào)用HelloService
數(shù)據(jù)持有類
創(chuàng)建一個(gè)數(shù)據(jù)類HelloMessageData
持有數(shù)據(jù):
/**
* A class to hold our message data
*/
data class HelloMessageData(val message : String = "Hello Koin!")
服務(wù)接口和實(shí)現(xiàn)
創(chuàng)建一個(gè) HelloService
接口他的實(shí)現(xiàn)類HelloServiceImpl
來(lái)展示和使用HelloMessageData
使用類
要運(yùn)行HelloService
組件懦趋,需要先創(chuàng)建一個(gè)運(yùn)行時(shí)(runtime)組件晾虑,讓我們寫(xiě)一個(gè)HelloApplication
類繼承KoinComponent
接口,這個(gè)接口可以讓我們?cè)诤竺媸褂玫臅r(shí)候調(diào)用by inject()
函數(shù)拿到HelloService
組件仅叫。
/**
* HelloApplication - Application Class
* use HelloService
*/
class HelloApplication : KoinComponent {
// Inject HelloService
val helloService by inject<HelloService>()
// display our data
fun sayHello() = println(helloService.hello())
}
聲明依賴
現(xiàn)在帜篇,讓我們Koin模塊組裝HelloMessageData
和HelloService
。
val helloModule = module {
single { HelloMessageData() }
single { HelloServiceImpl(get()) as HelloService }
}
我們用關(guān)鍵字single
聲明上面的組件為單例诫咱。
-
single { HelloMessageData() }
:聲明一個(gè)HelloMessageData
單例 -
single { HelloServiceImpl(get()) as HelloService }
:將單例HelloMessageData
注入到HelloServiceImpl
坠狡,聲明一個(gè)HelloService
單例
完成
從main
函數(shù)啟動(dòng)應(yīng)用:
fun main(vararg args: String) {
startKoin {
// use Koin logger
printLogger()
// declare modules
modules(helloModule)
}
HelloApplication().sayHello()
}