Koin是一款轻量级的依赖注入框架,根据官方的描述,它无代理,无代码生成,无反射。
学过Dagger2的同学都深深体会到Dagger入门的艰辛。
但是Koin,你通过5分钟的学习就可以掌握它的基本用法。
学完Koin,你可以向Dagger 说bye bye了。
第一步:Gradle Setup
在你的app build.gradle中添加依赖:
// Add Jcenter to your repositories if needed
repositories {
jcenter()
}
dependencies {
// Koin for Android - Scope feature
// include koin-android-scope & koin-android
compile 'org.koin:koin-android-viewmodel:1.0.0-RC-1'
}
第二步:Our components
写一些测试用的类,提供数据
interface HelloRepository {
fun giveHello(): String
}
class HelloRepositoryImpl() : HelloRepository {
override fun giveHello() = "Hello Koin"
}
第三步:自定义ViewModel
使用第二步定义类提供的数据
class MyViewModel(val repo : HelloRepository) : ViewModel() {
fun sayHello() = "${repo.giveHello()} from $this"
}
第四步:定义Koin module
val appModule = module {
// single instance of HelloRepository
single<HelloRepository> { HelloRepositoryImpl() }
// MyViewModel ViewModel
viewModel { MyViewModel(get()) }
}
代码分析:
- appModule中声明了MyViewModel,它的参数传入了get(), 它将自动搜索到对应的HelloRepository,创建实例。
- single标明HelloRepository创建的是单例
第五步:启动 Koin
class MyApplication : Application(){
override fun onCreate() {
super.onCreate()
// Start Koin
startKoin(this, listOf(appModule))
}
}
第六步:注入依赖
class MyViewModelActivity : AppCompatActivity() {
// Lazy Inject ViewModel
val myViewModel: MyViewModel by viewModel()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_simple)
//...
}
}
总结
通过上述几步,我们实现了自定义module的依赖注入,代码非常简单,易于理解。
本文基于Koin的1.0.0-RC-1版本分析。
值得注意的是Koin针对Java,Android,和AndriodX的依赖库是不一样,需要根据你的实际需求添加,详见
https://insert-koin.io/docs/1.0/setup/
如果你需要了解更多信息,请参考:
https://insert-koin.io/docs/1.0/getting-started/introduction/
https://insert-koin.io/docs/1.0/quick-references/koin-dsl/
网友评论