protected function createInstance($className, $constructor = null, array $arguments = [], array $injections = [])
    {
        // Check for required dependency injections ...
        if (count($injections[Doozr_Di_Constants::INJECTION_TYPE_CONSTRUCTOR]) > 0) {
            // Get injections for constructor
            $constructorInjections = $this->parseInjections(
                Doozr_Di_Constants::INJECTION_TYPE_CONSTRUCTOR,
                $injections
            );

            // Process injections for constructor
            if (null !== $constructorInjections) {
                $arguments = $this->mergeArguments($constructorInjections, $arguments);
            }
        }

        // Get instance - for no dependency calls too
        $instance = $this->constructorInjection($className, $arguments, $constructor);

        // process only if $injections exists
        if (count($injections[Doozr_Di_Constants::INJECTION_TYPE_METHOD]) > 0) {

            // Get injections for methods
            $methodInjections = $this->parseInjections(
                Doozr_Di_Constants::INJECTION_TYPE_METHOD,
                $injections
            );

            if (null !== $methodInjections) {
                $this->methodInjection($instance, $methodInjections);
            }
        }

        // process only if $injections exists
        if (count($injections[Doozr_Di_Constants::INJECTION_TYPE_PROPERTY]) > 0) {

            // Get injections for property
            $propertyInjections = $this->parseInjections(
                Doozr_Di_Constants::INJECTION_TYPE_PROPERTY,
                $injections
            );

            // process injections for constructor
            if (null !== $propertyInjections) {
                $this->propertyInjection($instance, $propertyInjections);
            }
        }

        return $instance;
    }