2

我有我的 Boot.scala 和引导方法,我在其中进行设置。最后,我调用 LiftRules.statelessDispatchTable 并附加我的类的一个新实例,该实例扩展了具有服务块的 RestHelper。

在某些时候,我收到一个信号并需要更改此类,因此我需要再次调用 statelessDispatchTable 以删除原始的并添加一个新的。

有什么好方法可以做到这一点?

谢谢!

编辑:我将用我从大卫·波拉克那里得到的答案来更新这个问题:

你不能。一旦您的应用程序启动,就无法更改 LiftRules。

但是,您要添加到 statelessDispatchTable 的东西是 PartialFunction[Req, Box[LiftResponse]] 因此您可以编写如下所示的 PartialFunction:

object RestThing1 extends RestHelper { .... }

object RestThing2 extends RestHelper {....}

object MyDynamicRestThing extends PartialFunction[Req, Box[LiftResponse]] {
  def isDefinedAt(in: Req): Boolean = if (testCondition) RestThing1.isDefinedAt(in) else RestThing2.isDefinedAt(in)
  def apply(in: Req): Box[LiftRequest] = if (testCondition) RestThing1.apply(in) else RestThing2.apply(in)
}

LiftRules.statelessDispatchTable.append(MyDynamicRestThing)
4

1 回答 1

0

您可以创建一个二级调度......例如,一个接收请求的对象,然后根据其他一些逻辑将请求代理到真正的处理程序。那么你就完全不用搞乱顶级调度表了。

如果您需要做的是根据信号切换它(例如它会在某个时候恢复),或者如果有其他逻辑可以从适当的抽象中受益,那么这样做真的很有意义。

于 2012-09-05T06:14:58.077 回答