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:
... поэтому код, который компилируется с 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
)