protected function bindInboundRequest()
    {
        $this->app->singleton(JsonApiRequest::class);
        $this->app->alias(JsonApiRequest::class, 'json-api.request');

        $this->app->singleton(Route::class, function (Application $app) {
            return new Route(
                $app->make(ResolverInterface::class),
                $app->make('router')->current()
            );
        });

        $this->app->bind(StoreInterface::class, function () {
            return json_api()->getStore();
        });

        $this->app->bind(ResolverInterface::class, function () {
            return json_api()->getResolver();
        });

        $this->app->bind(ErrorRepositoryInterface::class, function () {
            return json_api()->getErrors();
        });

        $this->app->bind(ContainerInterface::class, function () {
            return json_api()->getContainer();
        });

        $this->app->singleton(HeaderParametersInterface::class, function (Application $app) {
            /** @var HeaderParametersParserInterface $parser */
            $parser = $app->make(HttpFactoryInterface::class)->createHeaderParametersParser();
            /** @var ServerRequestInterface $serverRequest */
            $serverRequest = $app->make(ServerRequestInterface::class);

            return $parser->parse($serverRequest, http_contains_body($serverRequest));
        });

        $this->app->singleton(EncodingParametersInterface::class, function (Application $app) {
            /** @var QueryParametersParserInterface $parser */
            $parser = $app->make(HttpFactoryInterface::class)->createQueryParametersParser();

            return $parser->parseQueryParameters(
                request()->query()
            );
        });
    }