玩2.1 getControllerInstance用法?

时间:2013-01-24 17:11:40

标签: playframework

GlobalSettings上getControllerInstance的预期用法模式是什么?是否可以在没有依赖注入框架的情况下使用它?

签名为getControllerInstance[A](controllerClass: Class[A]): A

因此,根据我的理解,这将在使用@前缀指定的任何路由上调用,并且您必须返回该类型控制器的实例(A)。但是如果AClass的参数化类型,它在运行时会受到类型擦除的影响,对吗?我怎么知道要求哪个控制器类?

1 个答案:

答案 0 :(得分:1)

我找到了看起来非Scala的方式,但对我有用。

override def getControllerInstance[A](controllerClass: Class[A]): A = {
  if (controllerClass == classOf[CardsService]) ComponentsRegistry.cardsService.asInstanceOf[A]
  else super.getControllerInstance(controllerClass)
}

我绝对同意这很难看,并且很乐意看到更好的解决方案。

不幸的是,这里不能使用模式匹配来使这段代码变得更加惯用:How can I match classes in a Scala "match" statement?