我是Play和Scala(2.6版)的新手,我不知道如何使路由以简单的方式工作。我整理了2.6文档中的示例,我设法创建了一个自定义应用程序加载器,据我了解,这是执行Evolution迁移所必需的。我发现的示例包括一个var路由器= Routes.empty BuiltInComponentsFromContext似乎要求使用路由器,但这样做的话,我的路由现在断开了,现在得到的都是“ Action Not找到”消息。
这是我的application.conf:
Invalid query param layer
这是应用程序加载器
play.application.loader=MyApplicationLoader
router = my.application.Router
通过声明,在我看来:
import play.api.ApplicationLoader
import play.api.ApplicationLoader.Context
import play.api.BuiltInComponentsFromContext
import play.api.db.{Database, DBComponents, HikariCPComponents}
import play.api.db.evolutions.EvolutionsComponents
import play.api.routing.Router
import play.filters.HttpFiltersComponents
//import com.softwaremill.macwire._
class MyApplicationLoader extends ApplicationLoader {
def load(context: Context) = {
new MyComponents(context).application
}
}
class MyComponents(cntx: Context)
extends BuiltInComponentsFromContext(cntx)
with DBComponents
with EvolutionsComponents
with HikariCPComponents
with HttpFiltersComponents
{
// this will actually run the database migrations on startup
//lazy val router = Router.empty
val router = Router.empty
applicationEvolutions
}
我实际上是使我在conf / routes文件中声明的任何路由无效,并且使用Router.load方法对我来说似乎是偶然的,但是我找不到如何传递必需的示例。方法的环境和配置值。假设我不想使用静态路由,该怎么做?
答案 0 :(得分:1)
假设仅出于Evolution的目的而使用编译时依赖项注入(因为否则,您之前会遇到相同的问题),答案是您不必这样做。 Evolution也可以使用默认的动态依赖项注入。 The part of the documentation您可能基于以下假设而得出结论: 如果 您已经 已经 使用了以下编译-时间依赖注入,这是如何对其进行修改以使演化起作用。如果查看EvolutionsModule的源代码,可能会发现ApplicationEvolutions
已绑定eagerly。这意味着将在应用程序初始化期间在应用程序启动时创建ApplicationEvolutions
的实例。在ApplicationEvolutions
本身的源代码中,您可以看到start()
是从构造函数中调用的。因此,如果您提供了配置,其余的应该可以独立工作。