Описание функции
Упростить ServiceRegistry.php (~655 строк): убрать тройные hardcoded-списки сигнатур и switch для сложных зависимостей.
Проблема, которую решает
~43 ключа в $defaultServices с 'interface' => null. Конструкторы угадываются через controllersWithMs3Only / servicesWithModxAndMs3 / servicesWithDependencies + switch. Часть сервисов создаётся через new вне registry (ExtraFieldsService в routes, ManagerOrderCostRecalculator в OrdersController, Option* через фасады).
Хрупко при смене конструктора; DI не читается как таблица фактов.
Предлагаемое решение
- Явная map
serviceId => callable(modx, services): object (или invokable factories).
- Зарегистрировать currently-orphan сервисы, которые уже «ядровые».
- Удалить
in_array списки и default new $class($modx), если он скрывает ошибки конфигурации.
- Не вводить контейнер ради контейнера (Symfony DIC и т.п.) — достаточно понятного registry проекта.
Альтернативные варианты
- Оставить switch, только документировать — долг остаётся.
- Полный PSR-11 контейнер — шире, чем нужно Extra.
Критерии приёмки
Дополнительный контекст
Делать после или вместе с #338 (OrdersController), чтобы cost/finalize сервисы сразу попали в map.
Описание функции
Упростить
ServiceRegistry.php(~655 строк): убрать тройные hardcoded-списки сигнатур иswitchдля сложных зависимостей.Проблема, которую решает
~43 ключа в
$defaultServicesс'interface' => null. Конструкторы угадываются черезcontrollersWithMs3Only/servicesWithModxAndMs3/servicesWithDependencies+switch. Часть сервисов создаётся черезnewвне registry (ExtraFieldsServiceв routes,ManagerOrderCostRecalculatorв OrdersController, Option* через фасады).Хрупко при смене конструктора; DI не читается как таблица фактов.
Предлагаемое решение
serviceId => callable(modx, services): object(или invokable factories).in_arrayсписки и defaultnew $class($modx), если он скрывает ошибки конфигурации.Альтернативные варианты
Критерии приёмки
switchпо class name для wiring (или один узкий legacy-карман с планом удаления).$modx->services.Дополнительный контекст
Делать после или вместе с #338 (OrdersController), чтобы cost/finalize сервисы сразу попали в map.