MacWire: найдено несколько значений типа

Я использую инфраструктуру MacWire DI и получаю эту ошибку.

Found multiple values of type [play.api.mvc.DefaultActionBuilder]: [List(defaultActionBuilder, Action)]
[error]   override lazy val controllerComponents: DefaultControllerComponents = wire[DefaultControllerComponents]

Мой приложение-загрузчик это:

class AppApplicationLoader extends ApplicationLoader {
  def load(context: Context) = {
    LoggerConfigurator(context.environment.classLoader).foreach { cfg =>
      cfg.configure(context.environment)
    }
    new AppComponents(context).application
  }
}

 class AppComponents(context: Context) extends
      BuiltInComponentsFromContext(context) with AhcWSComponents
      with AssetsComponents with HttpFiltersComponents
      with EvolutionsComponents with DBComponents  with HikariCPComponents  with EhCacheComponents {

      override lazy val controllerComponents: DefaultControllerComponents = wire[DefaultControllerComponents]

Я получал некоторые другие ошибки, подобные после небольших модификаций кода. Как я могу следить за зависимостями DI, чтобы отследить эти ошибки?

1 ответ

Только что столкнулся с этим сам, похоже, из-за этого коммита, который был включен в качестве бэкпорта в Play 2.6.3:

https://github.com/playframework/playframework/pull/7676/files/809cd1e880b01d45e95d41e65f20bfa984d1e122

... поэтому код, который компилируется с Play 2.6.2, не работает с Play 2.6.3.

обходные:

  • Вернитесь в Play 2.6.2 или...
  • ... вручную указать создание вашего DefaultControllerComponents - т.е. не используйте MacWire для этого конкретного конструктора

Это не так красиво, но работает с Play 2.6.3:

val defaultControllerComponents = new DefaultControllerComponents(
  defaultActionBuilder,
  playBodyParsers,
  messagesApi,
  langs,
  fileMimeTypes,
  executionContext
)
Другие вопросы по тегам