ktor 插件:需要配置值

ktor plugins: require configuration values

我想知道是否有办法在制作自定义插件时要求配置参数?我目前的破解方法是在运行时捕获它

class PluginConfiguration {
    var someConfig: String? = null
}

val MyPlugin =
    createApplicationPlugin(name = "MyPlugin", createConfiguration = ::PluginConfiguration) {
        val someConfig = pluginConfig.someConfig
        pluginConfig.apply {
            if (someConfig == null) { // catch here
                throw java.lang.Exception("Must pass in someConfig")
            }
            onCallReceive { call ->
                // do stuff
            }
        }
    }

但如果编译器有办法捕捉就更好了。

我不想使用默认值的用例是我想传入使用依赖注入管理的昂贵对象

我认为 PluginConfiguration API 不可能。

但是把MyPlugin转成函数应该没有问题,需要指定一个参数:

fun MyPlugin(someRequiredConfig: String) =
    createApplicationPlugin(name = "MyPlugin", createConfiguration = ::PluginConfiguration) {
        val someConfig = someRequiredConfig
        pluginConfig.apply {
            onCallReceive { call ->
                // do stuff
            }
        }
    }
// ...
install(MyPlugin("config"))