public function start() {
        if ($this->started) {
            return;
        }

        $this->started = true;

        $this->getConfigLoader()->setEnvironment($this->getEnvironment());
        $this->config = $this->getConfigLoader()->load();
        $this->container->set([Config::class, IConfig::class], $this->config);
        $this->config->set('env', $this->getEnvironment());
        $this->config->set('debug', $this->getDebug());
        $this->eventer->dispatch(new ConfigLoadedEvent($this->config));

        $this->kernel->initialize();
        $this->eventer->dispatch(new KernelInitializedEvent($this->kernel));
        $this->kernel->boot();
        $this->eventer->dispatch(new KernelBootedEvent($this->kernel));
        $this->eventer->dispatch(new AppStartedEvent($this));
    }