2

セットアップを行うBootメソッドを含むBoot.scalaがあります。最後に、LiftRules.statelessDispatchTableを呼び出し、serveブロックを持つRestHelperを拡張するクラスの新しいインスタンスを追加します。

ある時点で、シグナルを受け取り、このクラスを変更する必要があるため、statelessDispatchTableをもう一度呼び出して、元のクラスを削除し、新しいクラスを追加する必要があります。

これを行うための良い方法は何ですか?

ありがとう!

編集:私はDAVID POLLAKから得た答えで質問を更新するつもりです:

できません。アプリが起動すると、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

第 2 レベルのディスパッチを作成することもできます。たとえば、リクエストを受け取るオブジェクトを作成し、他のロジックに従ってリクエストを実際のハンドラーにプロキシします。そうすれば、最上位のディスパッチ テーブルをいじる必要はまったくありません。

シグナルに基づいてトグルする必要がある場合 (たとえば、ある時点で元に戻る場合)、または適切な抽象化にあることでメリットが得られる追加のロジックがある場合、これを行うことは本当に理にかなっています。

于 2012-09-05T06:14:58.077 に答える