Koin هي مكتبة حقن تبعية مكتوبة بلغة Kotlin الخالصة

كيفية إدارة حقن التبعية بآلية النطاق الزمني

لطلاب المستقبل من دورة "مطور Android. محترف" أعدت ترجمة لمقال مفيد.

ندعوك أيضًا للمشاركة في الندوة المفتوحة على الويب حول موضوع "كتابة مكون إضافي لـ Gradle"


عن ماذا تتحدث هذه المقالة

سوف تتعلم كيفية استخدام وحدات كوين للحد من بقاء التبعيات الخاصة بالمكون. ستتعرف أيضًا على نطاقات Koin القياسية وكيفية العمل مع النطاقات المخصصة.

المقدمة

لا ينصح مطورو Android باستخدام Dependency Injection (DI) إذا كان التطبيق الخاص بك يحتوي على ثلاث شاشات أو أقل. ولكن إذا كان هناك المزيد منهم ، فمن الأفضل استخدام DI.

تعتمد الطريقة الشائعة لتطبيق DI في تطبيقات Android على إطار Dagger. لكنها تتطلب دراسة عميقة. أحد أفضل البدائل لهذا الإطار هو Koin ، وهي مكتبة مكتوبة بلغة Kotlin الخالصة.

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