проблемы рефакторинга решаются другими способами, а не подстраиванием библиотеки под неотносящююся к ней проблему.
Если мы про rename строковых id, то, ты знаешь, это решается константами, а не di-контейнером.
проблемы рефакторинга решаются другими способами, а не подстраиванием библиотеки под неотносящююся к ней проблему.
Одного контейнера уже достаточно для построения системы конфигурации всего приложения, если ему всё равно, что во что иньектить: объекты, строки, массивы:
Код: Выделить всё
$container->set(Mailer::class, function () { // задаём объект
return new Mailer( ... );
});
$container->set('supportEmail', 'mail@site.com'); // задаём параметр
$container->set(UserNotifier::class, function (Container $container) {
return new UserNotifier(
$container->get(Mailer::class), // иньектим объект
$container->get('supportEmail'), // иньектим параметр
);
});
...
$application = $container->get(Application::class);
$request = ServerRequestFactory::gromGlobals();
$application->handle($request);
Попытка сделать декларативный конфиг как в Symfony и Phalcon. Как полтора года назад я примеры синтаксиса приводил, но с попыткой вывернуть декларации в приоритет публичных полей.
Тогда можно:
Код: Выделить всё
$container = (new ArrayContainerBuilder($definitions))->build();
Код: Выделить всё
$container = new Container();
(new ArrayContainerBuilder())->build($container, $definitions);