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"))
我想知道是否有办法在制作自定义插件时要求配置参数?我目前的破解方法是在运行时捕获它
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"))