protected function registerCoreServices()
    {
        $this['util'] = function ($app) {
            return new \Slender\Core\Util\Util();
        };

        $this->registerService('dependency-injector','Slender\Core\DependencyInjector\Factory');
        $this->registerService('autoloader', 'Slender\Core\Autoloader\AutoloaderFactory');
        $this->registerService('autoloader.psr4', 'Slender\Core\Autoloader\PSR4Factory');




        /**
         * The configParser is used to translate various file
         * formats into PHP arrays
         *
         * @var ConfigFileParserInterface
         * @return \Slender\Core\ConfigParser\Stack
         */
        $this['config-parser'] = function () {
                return new ConfigParser\Stack(array(
                    'yml' => new ConfigParser\YAML,
                    'php' => new ConfigParser\PHP,
                    'json' => new ConfigParser\JSON,
                ));
            };


        /**
         * ConfigFinder is responsible for finding, loading and merging
         * configuration files
         *
         * @var ConfigFileFinderInterface
         * @return ConfigFileFinderInterface
         */
        $this['config-finder'] = function ($app) {
                $configLoader = new \Slender\Core\ConfigFinder\ConfigFinder(
                    $this['settings']['config']['autoload'],
                    $this['settings']['config']['files']
                );

                return $configLoader;
            };


        /**
         * ModuleResolver is used for tracking down a module's path
         * from it's name
         *
         * @var ModuleResolverInterface
         * @return \Slender\Core\ModuleResolver\ResolverStack
         */
        $this['module-resolver'] = function ($app) {
                $stack = new ResolverStack(new NamespaceResolver);
                $stack->setConfigParser($app['config-parser']);
                foreach ($this['settings']['modulePaths'] as $path) {
                    if (is_readable($path)) {
                        $stack->prependResolver(new DirectoryResolver($path));
                    }
                }

                return $stack;
            };

        /**
         * ModuleLoader is used to load modules & their dependencies,
         * registering services & routes etc along the way
         *
         * @var ModuleLoaderInterface
         * @param \Slender\App $app
         * @return ModuleLoaderInterface
         */
        $this->registerService('module-loader', 'Slender\Core\ModuleLoader\Factory');

    }