如何设置Play框架ApplicationLoader和Macwire以使用自定义路由?

时间:2017-07-04 18:27:19

标签: scala dependency-injection playframework playframework-2.0 macwire

我以这种方式设置应用程序加载器:

class MyProjectApplicationLoader extends ApplicationLoader {
  def load(context: Context): Application = new ApplicationComponents(context).application
}

class ApplicationComponents(context: Context) extends BuiltInComponentsFromContext(context)
  with QAControllerModule
  with play.filters.HttpFiltersComponents {

  // set up logger
  LoggerConfigurator(context.environment.classLoader).foreach {
    _.configure(context.environment, context.initialConfiguration, Map.empty)
  }

  lazy val router: Router = {
    // add the prefix string in local scope for the Routes constructor
    val prefix: String = "/"
    wire[Routes]
  }
}

但我的路线是自定义的,所以它看起来像:

routes文件:

-> /myApi/v1 v1.Routes
-> /MyHealthcheck HealthCheck.Routes

和我的v1.Routes文件:

GET    /getData    controllers.MyController.getData

所以现在当我编译项目时,我收到了这个错误:

  

错误:找不到类型的值:[v1.Routes]       线[路线]

所以我不知道如何解决这个问题,是否有人知道如何让加载程序与这种路径结构一起工作?

2 个答案:

答案 0 :(得分:4)

@marcospereira的回答是正确的,但也许代码有些错误。

错误是由引用routes的{​​{1}}文件引起的 - 这被编译为v1.routes类,其参数类型为Routes

您可以在v1.Routestarget/scala-2.12/routes/main/router中看到生成的代码。

因此,要连接/v1,您需要一个Router实例。要创建v1.Router r实例,首先需要连接它。

以下是修复上述示例的一种方法:

v1.Route

答案 1 :(得分:1)

您还需要连接<ul id="nav"> <li class="current"><a href="#">Test</a></li> <li><a href="#">Musik</a> <ul> <li><a href="#">Test</a></li> <li><a href="#">Test</a> <ul> <li><a href="#">Test</a></li> </ul> </li> </ul> </li> </ul>。请在此处查看如何手动完成:

https://www.playframework.com/documentation/2.6.x/ScalaCompileTimeDependencyInjection#Providing-a-router

这应该按照您的预期运作:

v1.Routes

ps。:没有在真实项目中测试它。