Как работает @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))
}
}