2

我是 Play 和 Scala(2.6 版)的新手,我不知道如何让路由以简单的方式工作。将 2.6 文档中的示例拼凑在一起,我设法创建了一个自定义应用程序加载器,据我所知,这是执行 Evolutions 迁移所必需的。我发现的示例包括一个 var router = Routes.empty BuiltInComponentsFromContext 似乎需要使用路由器,但是这样做,按照我的做法,我的路由现在被破坏了,现在我得到的只是“Action Not找到”消息。

这是我的application.conf:

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
}

在我看来,它声明:

val router = Router.empty

我基本上使我在我的 conf/routes 文件中声明的任何路由无效,并且我想到使用 Router.load 方法,但我找不到如何传递所需环境和配置的示例方法的值。假设我不想使用静态路由,我该怎么做?

4

1 回答 1

1

假设您只是为了进化而使用编译时依赖注入(因为否则您之前会遇到同样的问题),答案是您不必这样做。Evolutions 也适用于默认的动态依赖注入。您可能基于您的假设的文档部分实际上说,如果已经在使用编译时依赖注入,这里是如何修改它以使进化工作。如果您查看EvolutionsModule的源代码,您可能会看到它被急切地ApplicationEvolutions绑定。这意味着一个实例ApplicationEvolutions将在应用程序初始化期间在应用程序启动时创建。在它本身的源代码中,ApplicationEvolutions您可以看到它start() 是从构造函数中调用的。因此,如果您提供了配置,其余的应该自行工作。

于 2018-11-30T21:47:10.810 回答