С Play Framework, что я делаю не так при настройке роутеров? - PullRequest
0 голосов
/ 30 ноября 2018

Я новичок в Play и Scala (версия 2.6) и не могу понять, как заставить работать маршрутизацию простым способом.Собирая воедино примеры из документации 2.6, мне удалось создать собственный загрузчик приложений, который, как я понимаю, необходим для выполнения миграций Evolution.Пример, который я нашел, включал var router = Routes.empty. Похоже, что BuiltInComponentsFromContext требует использования маршрутизатора, но при этом, так, как я это сделал, мои маршруты теперь сломаны, и теперь все, что я получаю, это «Действие НеНашел "сообщения".

Вот мой 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 / routs, и мне пришло в голову использовать метод Router.load, но я не могу найти пример того, как передать требуемую средуи значения конфигурации для метода.Предполагая, что я не хочу использовать статические маршруты, как мне это сделать?

1 Ответ

0 голосов
/ 01 декабря 2018

Предполагая, что вы используете инъекцию зависимостей только во время компиляции только ради Эволюций (потому что иначе вы столкнулись бы с такими же проблемами ранее), ответ таков: вам не нужно этого делать.Эволюции также работают с внедрением динамической зависимости по умолчанию. Часть документации , на которой вы, вероятно, основываете свои предположения, фактически говорит, что , если , вы уже , используяВнедрение зависимостей во время компиляции, вот как его изменить, чтобы заставить работать эволюции.Если вы посмотрите на исходный код EvolutionsModule , то увидите, что ApplicationEvolutions связан с нетерпением Это означает, что экземпляр ApplicationEvolutions будет создан при запуске приложения во время инициализации приложения.А в исходном коде самого ApplicationEvolutions видно, что start() вызывается из конструктора.Поэтому, если вы предоставили конфигурацию, остальные должны работать самостоятельно.

...