2015-07-11 1 views
7

Я пытаюсь играть 2.4.2 для Scala, и я не знаю, следует ли определять контроллеры как классы или одиночные. Государство документы:Scala Play Framework - контроллер как класс или singleton

A Controller is nothing more than a singleton object that generates Action values.

Однако пример кода показывает:

class Application extends Controller { ... } 

Чтобы еще более усложнить вещи, IntelliJ дает мне предупреждение, если я определить класс:

intellij warning

Однако Я получаю ошибку компиляции (но без предупреждения), если я использую singleton:

package controllers 

import play.api._ 
import play.api.mvc._ 

object Application extends Controller { ... } 

Error:(6, -1) Play 2 Compiler: /Users/Toby/IdeaProjects/play-scala/conf/routes:6: type Application is not a member of package controllers

Какой подход исправить?

+0

Сначала проверьте контроллер в нужном пакете, а затем либо определить его как Singleton 'object Application extends Controller' или как класс, если вам нужна инъекция зависимостей. – cchantep

ответ

10

Ваши контроллеры должны быть объектами, если вы используете статический маршрутизатор. Статикой является маршрутизатор по умолчанию в Play 2.4 и имеет такое же поведение в Play 2.3 и ранее.

Вы можете конвертировать ваши контроллеры в классы, если вы используете внедренный маршрутизатор, который является новым в Play 2.4. Вам необходимо включить впрыскиваемый маршрутизатор в вашем build.sbt:

routesGenerator := InjectedRoutesGenerator 

Update: нагнетаемый маршрутизатор теперь по умолчанию в Play 2,5

+0

Спасибо, я заметил, что мой sbt включает routeGenerator: = InjectedRoutesGenerator, что странно, потому что я не добавлял его, и я думал, что по умолчанию был старый статический подход. Это объясняет, почему мои классы работают, но синглтон не –

+0

Они рекомендуют использовать внедренный маршрутизатор. Вероятно, что вы получите, если вы создадите новый проект из шаблона – dwickern

+0

. Для получения справки об ошибке кода IDEA/встроенной компиляции см. Проблему https://youtrack.jetbrains.com/issue/SCL-8812 –

Смежные вопросы