Play Web 框架允许注入“过滤器”列表来对请求(gzip、cors、日志记录等)进行常见处理。
package play.api
trait BuiltInComponents {
...
lazy val httpFilters: Seq[EssentialFilter] = Nil
<stuff that uses httpFilters>
...
}
我想要一组通用的这些过滤器(和其他东西)。
package example
import play.api.BuildInComponents
trait MyCommonComponents extends BuiltInComponents {
...
override lazy val filters = Seq(
wire[Filter1],
wire[Filter2],
wire[Filter3]
)
...
}
子类可以使用哪个
package example.foo
import example.MyCommonComponents
trait MyFooComponents extends MyCommonComponents {
...
}
或由子类添加
package example.bar
import example.MyCommonComponents
trait MyBarComponents extends MyCommonComponents {
...
override lazy val filters = super.filters :+ wire[Filter4]
...
}
我尝试过的事情
- 上面的代码。不能
super
与惰性 val 一起使用。 - 更改
httpFilters
为def
. 由于 BuiltInComponents 需要是一个稳定的值 - 添加
lazy val httpFilters = filters
,def filters: Seq[EssentialFilter] = ...
然后filters
根据需要覆盖。Macwire 抱怨模棱两可的类型。
我可以做些什么来实现可选附加的过滤器列表?