Skip to content

Koin 注解入门

Koin 注解项目的目标是帮助开发者以一种非常快速直观的方式声明 Koin 定义,并为你生成所有底层的 Koin DSL。借助 Kotlin 编译器,其目标是帮助开发者体验提升效率并加速 🚀。

入门

对 Koin 不熟悉?首先了解一下 Koin 入门

使用定义和模块注解为你的组件打上标签,然后使用常规的 Koin API。

kotlin
// 为你的组件打上标签以声明一个定义
@Single
class MyComponent
kotlin
// 声明一个模块并扫描注解
@Module
@ComponentScan
class MyModule

按照如下方式使用 org.koin.ksp.generated.* 导入,以便能够使用生成的代码:

kotlin
// 使用 Koin 生成
import org.koin.ksp.generated.*

fun main() {
    val koin = startKoin {
        printLogger()
        modules(
          // 在这里使用你的模块,配合模块类上生成的 ".module" 扩展属性
          MyModule().module
        )
    }

    // 像往常一样使用你的 Koin API
    koin.get<MyComponent>()
}

就是这样,你可以在 Koin 中配合常规 Koin API 使用你的新定义了。

KSP 选项

Koin 编译器提供了一些配置选项。遵循官方文档,你可以为你的项目添加以下选项:Ksp 快速入门文档

编译时安全 (Compile Safety) - 在编译时检查你的 Koin 配置(自 1.3.0 起)

Koin 注解允许编译器插件在编译时验证你的 Koin 配置。可以通过以下 KSP 选项激活此功能,将其添加到你的 Gradle 模块中:

groovy
// 在 build.gradle 或 build.gradle.kts 中

ksp {
    arg("KOIN_CONFIG_CHECK","true")
}

编译器将检查你的配置中使用的所有依赖是否都已声明,并且所有使用的模块都可访问。

使用 @Provided 绕过编译时安全检查(自 1.4.0 起)

除了编译器忽略的类型(Android 常见类型)之外,编译器插件可以验证你的 Koin 配置在编译时是否正确。如果你想将某个参数排除在检查之外,你可以在参数上使用 @Provided 以表明此类型是当前 Koin 注解配置外部提供的。

以下示例表明 MyProvidedComponent 已在 Koin 中声明:

kotlin
class MyProvidedComponent

@Factory
class MyPresenter(@Provided val provided : MyProvidedComponent)

禁用默认模块(自 1.3.0 起)

默认情况下,Koin 编译器会检测任何未绑定到模块的定义,并将其放入一个“默认模块”中,这是一个在项目根目录生成的 Koin 模块。你可以使用以下选项禁用默认模块的使用和生成:

groovy
// 在 build.gradle 或 build.gradle.kts 中

ksp {
    arg("KOIN_DEFAULT_MODULE","false")
}

Kotlin KMP 设置

请按照官方文档中描述的 KSP 设置进行操作:KSP 与 Kotlin Multiplatform

你还可以查看 Hello Koin KMP 项目,它包含了 Koin 注解的基本设置。