public function make($abstract, $args = [])
    {
        $abstract = isset($this->aliases[$abstract]) ? $this->aliases[$abstract] : $abstract;

        if (isset($this->instances[$abstract])) {
            return $this->instances[$abstract];
        }

        $concrete = isset($this->bindings[$abstract]) ? $this->bindings[$abstract]['concrete'] : $abstract;

        if ($abstract == $concrete || $concrete instanceof Closure) {
            $object = $this->build($concrete, $args);
        } else {
            $object = $this->make($concrete, $args);
        }

        if ($this->isShared($abstract)) {
            $this->instances[$abstract] = $object;
        }

        return $object;
    }