https://start.insert-koin.io/#/quickstart/kotlin?id=getting-started-with-kotlin-app
开始
Koin in 5 minutes (5分钟快速入手Koin)
Getting Started (开始)
本教程将会告诉你如何使用Koin注入和检索组件来编写一个Kotlin app。
可以直接在Github上查看项目或者下载zip
🚀 Go to Github or download Zip
首先,检查下 koin-core
依赖是不是按照如下形式添加了:
1
2
3
4
5
6
7
8
9
10
| // 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"
}
|
在我们的小型App上,我们只需要有2个组件:
- HelloMessageData - 持有数据(data)
- HelloService - 使用和显示HelloMessageData上的数据
- HelloApplication - 检索和使用HelloService
让我们创建一个 HelloMessageData
数据类来持有我们的数据:
1
2
3
4
| /**
* A class to hold our message data
*/
data class HelloMessageData(val message : String = "Hello Koin!")
|
让我们创建一个service来显示 HelloMessageData
中的数据。写一个 HelloServiceImpl
类以及他的接口 HelloService
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| /**
* Hello Service - interface
*/
interface HelloService {
fun hello(): String
}
/**
* Hello Service Impl
* Will use HelloMessageData data
*/
class HelloServiceImpl(private val helloMessageData: HelloMessageData) : HelloService {
override fun hello() = "Hey, ${helloMessageData.message}"
}
|
为了让HelloService组件能运行,我们还需要创建一个runtime组件。
让我们写一个 HelloApplication
类并让他实现 KoinComponent
接口。这能让我们稍后可以通过 by inject()
函数来检索我们的组件:
1
2
3
4
5
6
7
8
9
10
11
12
| /**
* HelloApplication - Application Class
* use HelloService
*/
class HelloApplication : KoinComponent {
// Inject HelloService
val helloService by inject<HelloService>()
// display our data
fun sayHello() = println(helloService.hello())
}
|
现在,让我们使用Koin module来将 HelloMessageData
和 HelloService
组装在一起:
1
2
3
4
5
6
| val helloModule = module {
single { HelloMessageData() }
single { HelloServiceImpl(get()) as HelloService }
}
|
我们使用 single
来将每一个组件声明成单例对象。
single { HelloMessageData() }
: 声明一个单例的 HelloMessageData
对象single { HelloServiceImpl(get()) as HelloService }
: 使用注入的 HelloMessageData
来构造HelloServiceImpl
对象,并声明成 HelloService
的单例对象。
只需要通过一个 main
函数来启动我们的app:
1
2
3
4
5
6
7
8
9
10
11
| fun main(vararg args: String) {
startKoin {
// use Koin logger
printLogger()
// declare modules
modules(helloModule)
}
HelloApplication().sayHello()
}
|