2015-12-04 42 views
3

我有一个指令,这样定义定义路由指令时可以使用隐式参数吗?

def allowedRoles(roles: UserRole*)(implicit login: Login): Directive0 = ??? 

但我不;吨似乎能够在使用它,而无需明确传中login参数

def myRoutes(implicit req: HttpRequest, login: Login) = { 
    path("example"/"path") { 
    get { 
     allowedRoles(Administrator) { // ← fails 
     handleGet 
     } 
    } 
    } 
} 

,如果我尝试编译它,它与类型不匹配失败:

[error] found : akka.http.scaladsl.server.Route 
[error]  (which expands to) akka.http.scaladsl.server.RequestContext => scala.concurrent.Future[akka.http.scaladsl.server.RouteResult] 
[error] required: com.example.Login 
[error]   allowedRoles(Administrator) { handleGet } } 

如果我改变标记线到allowedRoles(Administrator)(login)那么它的工作原理,但似乎我不应该这样做,我错过了什么?

+0

您是否尝试将隐式定义登录(在myRoutes定义中)? – Nyavro

回答

4

这是因为由斯卡拉规则,{ handleGet }被认为是allowedRoles第二个参数列表。要解决这个问题,请清楚它实际上是Directive0.apply的参数:

allowedRoles(Administrator).apply { handleGet } 
相关问题