先日Airframe RPCで遊んだ。
が、Routerをインスタンス化するときにコンストラクタ引数を渡せないという問題があった。
import wvlet.airframe.http.netty.Netty import wvlet.airframe.http._ object Server extends App { // Create a Router val router = RxRouter.of[FooBarService] // 引数を渡せない // Starting a new RPC server. Netty.server .withRouter(router) .withPort(8080) .start { server => server.awaitTermination() } }
ここでは、いったんdesign
メソッドを呼び、bind[型].toInstance()
を使うことでどうインスタンス化するかを制御できることがわかった。そしてstart
のかわりにbuild[NettyServer]
すればよい。
import wvlet.airframe.http.netty.Netty import wvlet.airframe.http._ object Server extends App { // Create a Router val router = RxRouter.of[FooBarService] // Starting a new RPC server. Netty.server .withRouter(router) .withPort(8080) .design .bind[FooBarService] .toInstance { FooBarService(para1, para2, para3) } .build[NettyServer] { server => server.awaitTermination() } }