public function create(string $className, array $bindings = []) {
        try {
            $class = new ReflectionClass($className);
        } catch (ReflectionException $ex) {
            throw new ContainerException('Failed to create reflection class from given class name.');
        }

        $out = null;
        if ($class->getConstructor() !== null) {
            $ctr    = $class->getConstructor();
            $params = $ctr->getParameters();

            $inParam = [];
            foreach ($params as $param) {
                $type = $this->getTypeHint($param);
                if (array_key_exists($type, $bindings)) {
                    $get = $bindings[$type];
                } else {
                    if ($this->container->has($type)) {
                        $get = $this->container->get($type);
                    } else {
                        $get = $this->create($type, $bindings);
                    }
                }

                $inParam[] = $get;
            }

            $out = $class->newInstanceArgs($inParam);
        } else {
            $out = $class->newInstanceWithoutConstructor();
        }

        return $out;
    }