كيفية إدارة حقن التبعية بآلية النطاق الزمني
لطلاب المستقبل من دورة "مطور 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 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" .