public function register(Container $container)
 {
     $container->bind(Relay::class, function (Container $container) {
         /** @var RelayBuilder $relayBuilder */
         $relayBuilder = $container->make(RelayBuilder::class);
         $queue = array_merge([$container->make(ResponseSender::class), $container->make(NikicFastRoute::class, ['actionAttributeName' => App::DEFAULT_ACTION_ATTRIBUTE_NAME, 'parametersAttributeName' => App::DEFAULT_PARAMETERS_ATTRIBUTE_NAME])], $container->tagged('middleware.error_handler'), $container->tagged('middleware.early'), $container->tagged('middleware'), $container->tagged('middleware.late'), [$container->make(ActionHandler::class, ['actionAttributeName' => App::DEFAULT_ACTION_ATTRIBUTE_NAME])]);
         return $relayBuilder->newInstance($queue);
     });
 }
 public function register(Container $container)
 {
     $container->bind(FastRoute\Dispatcher::class, function (Container $container) {
         $routeCollector = $container->make(FastRoute\RouteCollector::class);
         return new FastRoute\Dispatcher\GroupCountBased($routeCollector->getData());
     });
     $container->bind(FastRoute\RouteParser::class, FastRoute\RouteParser\Std::class);
     $container->bind(FastRoute\DataGenerator::class, FastRoute\DataGenerator\GroupCountBased::class);
     $container->afterResolving(FastRoute\RouteCollector::class, function (FastRoute\RouteCollector $routeCollector, Container $container) {
         /** @var RouteProvider $routeProvider */
         foreach ($container->tagged('route_provider') as $routeProvider) {
             $routeProvider->addRoutes($routeCollector);
         }
     });
     $container->bind(ParametersReader::class, function () {
         return new ParametersReader(App::DEFAULT_PARAMETERS_ATTRIBUTE_NAME);
     });
 }