Skip to content

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 * { *; }

另請參閱