Koin是一款轻量级的依赖注入框架,根据官方的描述,它无代理,无代码生成,无反射。
学过Dagger2的同学都深深体会到Dagger入门的艰辛。
但是Koin,你通过5分钟的学习就可以掌握它的基本用法。
学完Koin,你可以向Dagger 说bye bye了。
第一步:Gradle Setup
在你的app build.gradle中添加依赖:
// Add Jcenter to your repositories if neededrepositories { jcenter() } dependencies {// Koin for Androidcompile "org.koin:koin-android:1.0.1"// Koin Android Scope featurecompile "org.koin:koin-android-scope:1.0.1"// Koin Android ViewModel featurecompile "org.koin:koin-android-viewmodel:1.0.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) //... } }
作者:wenson123
链接:https://www.jianshu.com/p/1df77e402069