2

我正在尝试使用 macwire DI 在 Playframework 2.4 上构建应用程序,但 Play 中的 httpFilters 有问题!这是我正在尝试做的一个例子

class ExampleFilter extends Filter {
  def apply(nextFilter: RequestHeader => Future[Result])
           (requestHeader: RequestHeader): Future[Result] = {
    nextFilter(requestHeader).map { result =>
      result.withHeaders("Example" -> "test")
    }
  }
}

class Filters(ex:ExampleFilter) extends HttpFilters {
  val filters = Seq(ex)
}

DI模块

trait Module extends EhCacheComponents with BuiltInComponents {

  lazy val exampleFilter = wire[ExampleFilter]
  lazy val filters = wire[Filters]

加载器类

class Loader extends ApplicationLoader {
  def load(context: Context) = {
    new MyComponents(context).application
  }
}

class MyComponents(context: Context) extends BuiltInComponentsFromContext(context) with Module {
  lazy val router: Router = wire[Routes] withPrefix "/"
}

application.conf 的一部分是

play.http.filters = Filters

和 ExampleFilter 不起作用。我收到没有“示例”标题的响应

4

2 回答 2

1

看起来我找到了解决方案

class MyComponents(context: Context) extends BuiltInComponentsFromContext(context) with Module {
  override lazy val httpFilters = Seq(ExampleFilter)
  lazy val router: Router = wire[Routes] withPrefix "/"
}

,只需从BuiltInComponents trait 覆盖httpFilters(如上),并将ExampleFilter更改为 object 即可

于 2016-03-09T19:02:28.213 回答
0

看起来您Filters在未命名(默认)包中。把它放在包装的某个地方,比如appfilters.Filters.

所以

package appfilters

...

class Filters(ex:ExampleFilter) extends HttpFilters {

...

play.http.filters = appfilters.Filters 
于 2016-03-08T20:56:48.123 回答