Как работает @Inject в Scala

Мне интересно, как работает аннотация @Inject в Play-Scala. Очевидно, что он вводит зависимость, но мне любопытно, как это работает. Когда я использовал его на контроллере расширения класса и установил генератор маршрутов для injectroutesgenerator, кажется, что он автоматически создает объекты из этих классов, но как я могу использовать его в другом контексте?

пробовал:

@Inject val mailer: MailerClient = null

но это, похоже, не работает. Есть ли какие-либо возможности для @Inject things (что mailerClient, WS ЕТС.) непосредственно к значению, а не к классу контроллера?

1 ответов


выглядит вблизи. Изменить val to var потому что он не является окончательным и должен быть введен на последней стадии.

@Inject var mailer: MailerClient = null

Я бы также проверил, что MailerClient библиотека упоминается как зависимость в конфигурации проекта. Вы можете попробовать с WSClient вместо того, как он включен по умолчанию в шаблон:

@Inject var ws: WSClient = null

тем более, что я знаю, что этот конкретный человек работает.

обновление

создал демо на GitHub который является Play-Scala шаблон index способ изменен следующим образом:

import play.api._
import play.api.libs.ws.WSClient
import play.api.mvc._
import play.api.libs.concurrent.Execution.Implicits.defaultContext

class Application extends Controller {

  @Inject var ws: WSClient = null

  def index = Action.async {
    ws.url("http://google.com").get.map(r => Ok(r.body))
  }

}