タイムスコープメカニズムを使用して依存関係の挿入を管理する方法
コース「AndroidDeveloper。Professional」の将来の学生のために、役立つ記事の翻訳を用意しました。
また、「Gradleプラグインの作成」というトピックに関するオープンウェビナーに参加することをお勧めします。
この記事は何についてですか
Koinモジュールを使用して、コンポーネント固有の依存関係の存続可能性を制限する方法を学習します。また、標準のKoinスコープとカスタムスコープの操作方法についても学習します。
前書き
アプリケーションの画面が3つ以下の場合、Android開発者は依存関係インジェクション(DI)の使用を推奨しません。ただし、それらが多い場合は、DIを使用することをお勧めします。
AndroidアプリケーションにDIを実装する一般的な方法は、Daggerフレームワークに基づいています。しかし、それは深い研究を必要とします。このフレームワークの最良の代替手段の1つは、純粋なKotlinで記述されたライブラリであるKoinです。
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 scope2
single factory . . :
dependencies inside custom scopes3
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" .