public function register($provider)
    {
        // Verificar se provider já foi registrado
        $keyProvider = is_string($provider) ? $provider : get_class($provider);
        if (array_key_exists($keyProvider, $this->serviceProviders)) {
            return $this->serviceProviders[$keyProvider];
        }

        // Carregar provider quando string
        if (is_string($provider)) {
            $provider = new $provider($this);
        }

        if (method_exists($provider, 'register')) {
            $provider->register();
        }

        // Marcar como registrado
        $this->serviceProviders[$keyProvider] = $provider;

        // Verificar se deve
        if ($this->booted) {
            $this->bootProvider($provider);
        }

        return $provider;
    }