Play 2.7.x: ProvisionException: невозможно подготовить play.api.Application с циклическими зависимостями - PullRequest
0 голосов
/ 05 октября 2019

из Play 2.7.x Я не могу достать play.api.Application, я пробовал несколько способов, например, из пользовательского модуля (плагина) или даже из моего ApplicationController. Я всегда получаю следующую ошибку циклических зависимостей:

ProvisionException: Unable to provision, see the following errors:

1) Found a circular dependency involving play.api.Application, and circular dependencies are disabled.
  at play.api.DefaultApplication.class(Application.scala:252)
  while locating play.api.DefaultApplication
  while locating play.api.Application
    for the 10th parameter of controllers.ApplicationController.<init>(ApplicationController.scala:30)
  while locating controllers.ApplicationController
    for the 2nd parameter of router.Routes.<init>(Routes.scala:111)
  while locating router.Routes
  while locating play.api.inject.RoutesProvider
  while locating play.api.routing.Router
    for the 3rd parameter of play.api.http.DefaultHttpRequestHandler.<init>(HttpRequestHandler.scala:120)
  while locating play.api.http.DefaultHttpRequestHandler
  while locating play.api.http.HttpRequestHandler
    for the 6th parameter of play.api.DefaultApplication.<init>(Application.scala:253)
  at play.api.DefaultApplication.class(Application.scala:252)
  while locating play.api.DefaultApplication
  while locating play.api.Application

1 error

Например, из моего пользовательского модуля DynamicTemplateLoader:

@Singleton
class DynamicTemplateLoader @Inject(app: play.api.Application) {
   ...
}

или из моего ApplicationController:

class ApplicationController @Inject() (
  components: ControllerComponents
)(
  implicit app: play.api.Application
) extends AbstractController(components) with I18nSupport {
   ...
}

Зачем мне нужен play.api.Application? Мне нужно достать app.classloader, чтобы использовать отражение от моего плагина.

1 Ответ

1 голос
/ 06 октября 2019

Решил проблему, переключившись с инъекции экземпляра play.api.Application на инъекцию экземпляра javax.inject.Provider[play.api.Application].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...