Koin快速入门——Android ViewModel
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Koin快速入门——Android ViewModel相关的知识,希望对你有一定的参考价值。
参考技术A 首先,将Kotlin的android依赖在Gradle文件中引入如下:让我们创建一个 HelloRepository 来提供一些数据:
让我们创建一个ViewModel类来使用这些数据:
用 module 函数声明模块。让我们定义第一个组件:
?> 我们用 viewModel 关键字在 module 中声明 MyViewModel 类。Koin将为lifecycle ViewModelFactory提供一个MyViewModel,并将其绑定到当前组件。
有了module以后,就可以用Koin启动它。打开或者创建你的自定义的Application类(别忘了在mainfest.xml文件中声明),调用 startKoin() 函数:
MyViewModel 组件会和 HelloRepository 实例一起创建。要在Activity里面获取,需要使用代理注入器 by inject() 在Activity里注入:
by viewModel() :这个函数可以让我们从Koin里获得ViewModel实例。
getViewModel() :这个函数是不通过懒加载的方式,直接获得实例。
Koin如何注入Android活动/ appcompatactivity之外
Koin是一个新的,轻量级的DI库,可用于Android以及独立的kotlin应用程序。
通常你注入这样的依赖:
class SplashScreenActivity : Activity() {
val sampleClass : SampleClass by inject()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
}
用inject()
方法。
但是如果在活动上下文不可用的地方(例如活动之外)注入东西呢?
答案
有KoinComponent
来救援。在任何课程中你都可以简单地:
class SampleClass : KoinComponent {
val a : A? by inject()
val b : B? by inject()
}
扩展KoinComponent
可以访问inject()
方法。
请记住,通常以通常的方式注入东西就足够了:
class SampleClass(val a : A?, val b: B?)
另一答案
Koin使用KoinComponent
界面为此提供了解决方案。例如,如果需要在存储库中获取某些依赖项,则可以简单地实现KoinComponent接口。它使您可以访问各种Koin功能,如get()
和inject()
。仅当您无法重写构造函数以接受依赖项作为构造函数参数时,才使用KoinComponent。
class MyRepository: Repository(), KoinComponent {
private val myService by inject<MyService>()
}
构造函数注入比这种方法更好。
例如,同样的事情可以通过以下方式实现:
class MyRepository(private val service: MyService): Repository() {
...
}
您可以在koin模块中添加用于实例化此类的定义:
val serviceModule = module {
...
factory { MyService() }
}
val repositoryModule = module {
...
factory { MyRepository(get<MyService>()) }
}
以上是关于Koin快速入门——Android ViewModel的主要内容,如果未能解决你的问题,请参考以下文章
Koin如何注入Android活动/ appcompatactivity之外
Android注解三大框架DaggerHilt和Koin有何不同?
如何在 Android/Kotlin App 上通过 Koin 注入在 BaseActivity 中初始化/注入通用 ViewModel