我的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)
答案 0 :(得分:0)
你可以创建一个二级调度......例如,一个接收请求的对象,然后根据一些其他逻辑代理对真实处理程序的请求。然后你根本不必乱用顶级调度表。
如果您需要做的是基于信号切换它(例如它会在某个时刻恢复),或者是否有其他逻辑可以从适当的抽象中受益,那么这样做真的很有意义吗