SimpleMVC (реализация Dependency Injection)

Пытаюсь реализовать дополнение к SimpleMVC: передать Dependency Injection через конструктор.

Я наверно не до конца понимаю как рабоет DI. Пытаюсь создать класс Container, который будет являться DI контейнером. Его потом можно перенести в отдельный файл и подключать где требуется.

В этом классе работать с $config, получать массив конфигурации. Сделать в этом классе свой метод getConfig():

class Container
{
    public $config = null;

    public function __construct($config)
    {
        $this->config = $config;
    }

    public function getConfig()
    {
        return $this->config;
    }
}

и далее связывать класс Container с классом Application при помощи конструктора:

    public function __construct(Container $configData)
    {
        $this->configData = $configData;
    }

Не работает так у меня ничего. Помогите разобраться пожалуйста.) Если нужно еще что-то изучить дополнительно по теме, то готов изучить.

вот весь код моего файла: /var/www/SimpleMVC-example/vendor/it-for-free/simple-mvc/src/Application.php

<?php
namespace ItForFree\SimpleMVC;

use ItForFree\rusphp\PHP\ArrayLib\DotNotation\Dot;
use ItForFree\SimpleMVC\exceptions\SmvcUsageException;
use ItForFree\SimpleMVC\exceptions\SmvcConfigException;
use ItForFree\rusphp\PHP\Object\ObjectFactory;

/**
 * Класс-"точка входа" для работы фреймворка SimpleMVC
 *
 * Реализует паттерн "Одиночка" @see http://fkn.ktu10.com/?q=node/5572
 */


class Container
{
    public $config = null;

    public function __construct($config)
    {
        $this->config = $config;
    }

    public function getConfig()
    {
        return $this->config;
    }
}


class Application
{
    /**
     * Массив конфигурации приложения
     *
     * @var ItForFree\rusphp\PHP\ArrayLib\DotNotation\Dot
     */
    public $configData = null;


    /**
     * Cкрываем конструктор для того чтобы класс нельзя было создать в обход get()
     */

    public function __construct(Container $configData)
    {
        $this->configData = $configData;
    }

    /**
     * Метод для получения текущего объекта приложения
     *
     * @staticvar type $instance
     * @return ItForFree\SimpleMVC\Applicaion объект приложения
     */

//    public static function get()
//    {
//        static $instance = null; // статическая переменная
//        if (null === $instance) { // проверка существования
//            $instance = new static();
//        }
//        return $instance;
//    }

    /**
     * Запускает приложение
     *
     * @param array $config Конфигурационный масиив приложения
     */

    public function run() {

        if (!empty( $this->configData->getConfig() )) {
            $route = $this->getConfigObject('core.url.class')::getRoute();
            /**
             * @var ItForFree\SimpleMVC\Router
             */
            $Router = $this->getConfigObject('core.router.class');

            $Router->callControllerAction($route);

        } else {
            throw new SmvcCoreException('Не задан конфигурационный массив приложения!');
        }

        return $this;
    }



    /**
     * Устанавливает конфигурацию приложения из массива
     *
     * @param  array $config многомерный массив конфигурации приложения
     * @return $this
     */
    public function setConfiguration($configData)
    {
        $this->configData = new Dot($configData);
        return $this;
    }


    /**
     * Вернёт элемент из массива конфигурации приложения
     *
     * @param string $inConfigArrayPath ключ в виде строки, разделёной точками -- путь в массиве
     * @return mixed
     */

    public function getConfigElement($inConfigArrayPath)
    {
        if (empty( $this->configData->getConfig() )) {
            throw new SmvcUsageException('Не задан конфигурационный массив приложения!');
        }

        $configValue = $this->configData->getConfig($inConfigArrayPath);

        if (is_null($configValue)) {
           throw new SmvcConfigException("Элемент с данным путём [$inConfigArrayPath]"
                   . " отсутствует в конфигурационном массиве приложения!");
        }

        return $configValue;
    }

    /**
     * Создаст и вернёт объект по его имени из массива
     *
     * @param string $inConfigArrayPath ключ в виде строки, разделёной точками -- путь в массиве
     * @return mixed
     */
    public function getConfigObject($inConfigArrayPath)
    {
        $configValue = self::getConfigElement($inConfigArrayPath);

        if (!class_exists($configValue)) {
            throw new SmvcConfigException("Вы  запросили получение экземпляра класса "
                . "$configValue "
                . " (был добавлен в конфиг по адресу $configValue),"
                . " но такой класс не был ранее объеляен, "
                . "убедитесь чтобы его код подключен "
                . "до  обращения к экземпляру объекта ");
        }

        return ObjectFactory::getInstanceOrSingletone($configValue);
    }
}

Key Words for FKN + antitotal forum (CS VSU):