Koinは、純粋なKotlinで記述された依存関係注入ライブラリです。

タイムスコープメカニズムを使用して依存関係の挿入を管理する方法

コース「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 .

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()
        }
    }
}

, . , , . , .

. , - . !


"Android Developer. Professional". " Gradle plugin" .




All Articles