gpt4 book ai didi

scala - 使用 Play 框架,我在设置路由器时做错了什么

转载 作者:行者123 更新时间:2023-12-05 05:13:32 25 4
gpt4 key购买 nike

我是 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 方法,但我找不到如何传递所需的示例方法的环境和配置值。假设我不想使用静态路由,我该怎么做?

最佳答案

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

关于scala - 使用 Play 框架,我在设置路由器时做错了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53558396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com