如何使用时域机制管理依赖项注入
为课程“ Android Developer。Professional”的未来学生准备了一篇有用的文章的翻译。
我们还邀请您参加有关“编写Gradle插件”主题的开放式网络研讨会。
这篇文章是关于什么的
您将学习如何使用Koin模块来限制特定于组件的依赖项的生存能力。您还将了解标准的Koin范围以及如何使用自定义范围。
介绍
如果您的应用程序具有三个或更少的屏幕,则Android开发人员不建议使用依赖注入(DI)。但是,如果有更多的话,最好使用DI。
在Android应用程序中实现DI的一种流行方法是基于Dagger框架。但这需要深入研究。最好的替代方案之一是Koin,这是一个用纯Kotlin编写的库。
Dagger DI, , , , (scope). , , — . .
Koin
Koin Android. , , (ViewModel) , .
, Koin .
single
( ) — , ( );factory
( ) — , ( );scoped
( ) — , .
single
, factory
.
single
factory
Koin Koin. .
. , OnBoardRepository
Android- . , .
Koin, API . Koin . .
1
, . CustomScope
. . :
creating custom koin scope
2
single
factory
. . :
dependencies inside custom scopes
3
Koin. , . Android-, Activity, Fragment . .
, Koin, createScope, .
val stringQualifiedScope = getKoin().createScope(
"ScopeNameID", named("CustomeScope"))
CustomScope , Koin , Koin. ScopeNameID
— , , . .
Android-, createScope
getOrCreateScope
. , .
4
, , . . .
val sampleClass = stringQualifiedScope.get<SampleClass>(
qualifier = named("scopedName"))
scopedName
factoryName
— , Koin 2.
5
, stringQualifiedScope, sampleclass
, close
. , , close
onDestroy
. :
override fun onDestroy() {
super.onDestroy()
stringQualifiedScope.close()
}
Koin-Android
. , Koin. Android-, Koin , , .
Koin-Android. dependencies build.gradle
:
// Koin for Android
implementation "org.koin:koin-android:$koin_version"
// Koin Android Scope features
implementation "org.koin:koin-android-scope:$koin_version"
Koin-Android
, , onDestroy
Android. Koin lifecyclescope
.
Koin Android. :
val androidModule = module {
scope<SampleActivity> {
scoped { SampleClass() }
}
}
scoping dependency with android activity
lifecyclescope
:
val sampleClass : SampleClass by lifecycleScope.inject()
, . :
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
fun onDestroy() {
if (event == Lifecycle.Event.ON_DESTROY) {
scope.close()
}
}
}
, . , , . , .
Koin.
Kotlin, Kotlin ( ).
Kotlin , Kotlin.
. , - . !
"Android Developer. Professional". " Gradle plugin" .