Koin Annotations 入門
Koin Annotations 讓您可以使用註解在類別上宣告定義。Koin 編譯器外掛程式會處理這些註解,並在編譯期為您產生所有底層的 Koin DSL。
快速入門
對 Koin 不熟悉嗎?首先,請查看 Koin 快速入門
設定
將 Koin 編譯器外掛程式加入到您的專案中。請參閱 編譯器外掛程式設定 以獲取完整說明。
kotlin
// build.gradle.kts
plugins {
alias(libs.plugins.koin.compiler)
}
dependencies {
implementation(libs.koin.core)
implementation(libs.koin.annotations)
}為元件加上註解
使用定義註解標記您的元件:
kotlin
@Singleton
class MyRepository
@Singleton
class MyService(val repository: MyRepository)
@Factory
class MyUseCase(val service: MyService)宣告模組
建立模組以組織您的定義:
kotlin
@Module
@ComponentScan("com.myapp")
class AppModule啟動 Koin
搭配型別安全啟動 API 使用 @KoinApplication:
kotlin
@KoinApplication(modules = [AppModule::class])
class MyApp
fun main() {
startKoin<MyApp> {
printLogger()
}
// 像往常一樣使用您的 Koin API 即可
KoinPlatform.getKoin().get<MyService>()
}配置標記
使用 @Configuration 建立根據標記載入的模組:
kotlin
@Module
@Configuration // 預設配置
class CoreModule
@Module
@Configuration("prod")
class ProdModule
@Module
@Configuration("test")
class TestModule載入特定配置:
kotlin
@KoinApplication(
modules = [CoreModule::class],
configurations = ["prod"] // 僅載入標記為 @Configuration("prod") 的模組
)
class ProdApp
fun main() {
startKoin<ProdApp>()
}型別安全啟動 API
編譯器外掛程式提供了用於啟動 Koin 的型別安全 API:
| API | 說明 |
|---|---|
startKoin<T>() | 全域啟動 Koin |
startKoin<T> { } | 使用配置區塊啟動 |
koinApplication<T>() | 建立隔離的 KoinApplication |
koinConfiguration<T>() | 建立配置(適用於 Compose、Ktor) |
其中 T 是標記有 @KoinApplication 的類別。
編譯期安全
編譯器外掛程式會在編譯期驗證您的 Koin 配置,檢查所有相依性是否已宣告且可存取。
使用 @Provided 繞過
使用 @Provided 來表示相依性是由外部提供的:
kotlin
class ExternalComponent // 宣告於他處
@Factory
class MyPresenter(@Provided val external: ExternalComponent)編譯器外掛程式選項
請參閱 編譯器外掛程式選項 以獲取所有配置選項。
ProGuard 規則
搭配 ProGuard/R8 進行 SDK 開發時:
# 保留註解定義
-keep class org.koin.core.annotation.** { *; }
# 保留使用 Koin 註解標記的類別
-keep @org.koin.core.annotation.* class * { *; }