public function addPlugin(IPlugin $plugin, $autoExecute = false) {
        if (isset($this[$plugin->getPluginName()])) {
            return $this;
        }

        $plugin->setApplication($this);
        $plugin->initPlugin();

        if ($autoExecute) {
            $this->{$plugin->getPluginName()};
        }

        return $this;
    }