protected function configureContainerInternal()
	{
		$this->container->add(
			'instantiator',
			function () {
				return function ($name) {
					return $this->container->get($name);
				};
			}
		);

		$this->container->add(\Weave\Middleware\Middleware::class)
		->withArgument(\Weave\Middleware\MiddlewareAdaptorInterface::class)
		->withArgument(
			function ($pipelineName) {
				return $this->provideMiddlewarePipeline($pipelineName);
			}
		)
		->withArgument(\Weave\Resolve\ResolveAdaptorInterface::class)
		->withArgument(\Weave\Dispatch\DispatchAdaptorInterface::class)
		->withArgument(\Weave\Http\RequestFactoryInterface::class)
		->withArgument(\Weave\Http\ResponseFactoryInterface::class)
		->withArgument(\Weave\Http\ResponseEmitterInterface::class);

		$this->container->add(
			\Weave\Resolve\ResolveAdaptorInterface::class,
			\Weave\Resolve\Resolve::class
		)
		->withArgument('instantiator');

		$this->container->add(
			\Weave\Dispatch\DispatchAdaptorInterface::class,
			\Weave\Dispatch\Dispatch::class
		);

		$this->container->add(\Weave\Middleware\Dispatch::class)
		->withArgument(\Weave\Resolve\ResolveAdaptorInterface::class)
		->withArgument(\Weave\Dispatch\DispatchAdaptorInterface::class);

		$this->container->add(\Weave\Router\Router::class)
		->withArgument(\Weave\Router\RouterAdaptorInterface::class)
		->withArgument(
			function ($router) {
				return $this->provideRouteConfiguration($router);
			}
		)
		->withArgument(\Weave\Resolve\ResolveAdaptorInterface::class)
		->withArgument(\Weave\Dispatch\DispatchAdaptorInterface::class);
	}