本教程可以让你使用Koin框架写一个可以注入和调用你的组件的Android应用
框架引入
首先,将Kotlin的Android依赖在Gradle文件中引入如下:
// Add Jcenter to your repositories if needed
repositories {
jcenter()
}
dependencies {
// Koin for Android
compile "org.koin:koin-android:$koin_version"
}
我们的接口
让我们创建一个HelloRepository
来提供一些数据:
interface HelloRepository {
fun giveHello(): String
}
class HelloRepositoryImpl() : HelloRepository {
override fun giveHello() = "Hello Koin"
}
让我们创建一个presenter类来使用这些数据:
class MySimplePresenter(val repo: HelloRepository) {
fun sayHello() = "${repo.giveHello()} from $this"
}
实现Koin模块
用module
函数声明模块。让我们定义第一个组件:
val appModule = module {
// single instance of HelloRepository
single<HelloRepository> { HelloRepositoryImpl() }
// Simple Presenter Factory
factory { MySimplePresenter(get()) }
}
?> 我们用factory
关键字声明MySimplePresenter
类,在每次Activity
需要时生成一个新的实例。
启动Koin
有了module以后,就可以用Koin启动它。打开或者创建你的自定义的Application类(别忘了在mainfest.xml文件中声明),调用startKoin()
函数:
class MyApplication : Application(){
override fun onCreate() {
super.onCreate()
// Start Koin
startKoin{
androidLogger()
androidContext(this@MyApplication)
modules(appModule)
}
}
}
依赖注入
MySimplePresenter
组件会和HelloRepository
实例一起创建。要在Activity里面获取,需要使用by inject()
在Activity里注入:
class MySimpleActivity : AppCompatActivity() {
// Lazy injected MySimplePresenter
val firstPresenter: MySimplePresenter by inject()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//...
}
}
提示
by inject()
:这个函数可以让我们在Activity,Fragment,Service...里获得Koin实例。
get()
:这个函数是不通过懒加载的方式,直接获得实例。