Краткая версия: как внедрить объект внутри Action в Play Framework?Play Framework: Инъекция зависимостей внутри действия
Длинная версия: В моем проекте у меня есть пользовательское действие аннотации @AuthenticationRequired
, которое загружает объект из базы данных User
и помещает его в context.args
. Он использует класс DAO, который реализует UserDAO
. Теперь я хочу использовать DAO класс, введенный в Action
Google Guice. Я могу использовать Guice и вводить экземпляры в контроллеры и тесты, но мне трудно вводить DAO-класс внутри Action.
Инжектор - это поле на GlobalSettings
экземпляр.
Я попытался переопределить GlobalSettings#onRequest()
и поместить экземпляр UserDAO в context.args
, а затем извлечь его изнутри AuthenticationRequired
действия, но оказывается, что действия, возвращенное GlobalSettings#onRequest()
называют последним в цепочке действий, используемых с @With и/или пользовательских аннотаций , поэтому, это поздно.
Я также попытался ввести экземпляр DAO с помощью аннотирования конструктора действий, но он использует конструктор no-args для создания экземпляра действия.
Любые идеи, как я могу это достичь?
ли вы имеете в виду, что если я определить действие как свойство моего контроллера (+ аннотирования его с '@ Inject' и передать его как параметр для конструктора), то тот же экземпляр будет использоваться как действие контроллера? –
Я имел в виду, что если вы аннотируете свой контроллер аннотацией к действию, как [здесь] (https://playframework.com/documentation/2.4.x/JavaActionsComposition#Annotating-controllers), то ваше действие будет создаваться с помощью контейнера DI (и это зависимостей) непосредственно перед вашим контроллером. DI Container будет вводить зависимости вашего действия, и вы сможете использовать их в своем коде действий –