У меня есть приложение Slim4, состоящее из нескольких модулей, разделенных на разные группы маршрутизации, например:
$app->group('/app', function(RouteCollectorProxy $app) {
/*blah blah*/
})->add(MyMiddleWare::class);
$app->group('/api', function(RouteCollectorProxy $app) {
/*blah blah*/
})->add(MyMiddleware::class);
$app->group('/admin', function(RouteCollectorProxy $app) {
/*blah blah*/
})->add(MyMiddleware::class);
MyMiddleware получает интерфейс
class MyMiddleware
{
public function __construct(IMyInterface $myServiceImplementingInterface) { /*blah blah*/ }
}
Когда мы устанавливаем контейнер, мы говорим ему, какой класс внедрить, чтобы PHP -D я знал, какой класс для создания промежуточного программного обеспечения:
/* bootstraping */
$containerBuilder = new ContainerBuilder();
$containerBuilder->addDefinitions(__DIR__ . '/container.php');
$container = $containerBuilder->build();
и
/*container.php*/
return [
IMyInterface::class => function (ContainerInterface $container) {
return new MyServiceImplementingInterface();
},
];
My Главный вопрос:
Можно ли как-то отменить реализацию настройки контейнера для IMyInterface::class
на основе группы маршрутизации? поэтому у меня может быть что-то вроде:
Настройка основного контейнера:
/*container.php*/
return [
IMyInterface::class => function (ContainerInterface $container) {
return new MyServiceImplementingInterface();
},
];
Specifi c Настройка контейнера группы маршрутов:
/*container.admin.php*/
return [
IMyInterface::class => function (ContainerInterface $container) {
return new AnotherServiceImplementingInterface();
},
];