Koin - 一个基于Kotlin语言智能的依赖注入框架,让你专注于应用开发而不是工具使用。
本教程可以让你使用Koin框架写一个可以注入和调用你的组件的Kotlin应用。
框架引入
首先,将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"
}
应用开发
在我们的实例应用中,我们要定义一下两个组件:
- HelloMessageData - 持有数据
- HelloService - 使用和展示HelloMessageData的数据
- HelloApplication - 调用HelloService
数据持有类
创建一个数据类HelloMessageData
持有数据:
/**
* A class to hold our message data
*/
data class HelloMessageData(val message : String = "Hello Koin!")
服务接口和实现
创建一个 HelloService
接口他的实现类HelloServiceImpl
来展示和使用HelloMessageData
使用类
要运行HelloService
组件,需要先创建一个运行时(runtime)组件,让我们写一个HelloApplication
类继承KoinComponent
接口,这个接口可以让我们在后面使用的时候调用by inject()
函数拿到HelloService
组件。
/**
* HelloApplication - Application Class
* use HelloService
*/
class HelloApplication : KoinComponent {
// Inject HelloService
val helloService by inject<HelloService>()
// display our data
fun sayHello() = println(helloService.hello())
}
声明依赖
现在,让我们Koin模块组装HelloMessageData
和HelloService
。
val helloModule = module {
single { HelloMessageData() }
single { HelloServiceImpl(get()) as HelloService }
}
我们用关键字single
声明上面的组件为单例。
-
single { HelloMessageData() }
:声明一个HelloMessageData
单例 -
single { HelloServiceImpl(get()) as HelloService }
:将单例HelloMessageData
注入到HelloServiceImpl
,声明一个HelloService
单例
完成
从main
函数启动应用:
fun main(vararg args: String) {
startKoin {
// use Koin logger
printLogger()
// declare modules
modules(helloModule)
}
HelloApplication().sayHello()
}