Skip to content

上下文参数 (Context Parameters) Experimental

源:Context Parameters 提案

这是 Kotlin 引入的一种全新的依赖注入方式,旨在解决“显式参数传递地狱”和“隐式 ThreadLocal 不安全”的问题。 它曾被称为 Context Receivers

核心语法

使用 context(...) 关键字声明函数需要的环境。

kotlin
interface UserService {
    fun findUser(): String
}

interface Logger {
    fun log(msg: String)
}

// 声明:我不属于 UserService 或 Logger,但我运行需要它们
context(UserService, Logger)
fun createUser() {
    log("Creating user") // 自动找到 Logger
    val user = findUser() // 自动找到 UserService
}

调用侧

调用时,必须确保当前作用域内存在所需的上下文对象。

kotlin
fun main() {
    val myService = ...
    val myLogger = ...

    with(myService) {
        with(myLogger) {
            createUser() // ✅ 环境满足,调用成功
        }
    }
}

优势

  1. 解耦: 业务逻辑不再死板地持有依赖引用。
  2. 多继承模拟: 函数可以同时拥有多个“接收者”,这是传统扩展函数 (T.()) 做不到的。