public function initInvokableServices()
    {
        $config = $this->getConfig();
        if (!isset($config['service_manager'])) {
            return $this;
        }
        
        $smConfig = $config['service_manager'];
        if (!isset($smConfig['invokables'])) {
            return $this;
        }
        $invokables = $smConfig['invokables']->toArray();
        $shared     = isset($smConfig['shared']) ? $smConfig['shared']->toArray() : [];
        foreach ($invokables as $serviceName => $serviceClassName) {
            if (!is_string($serviceClassName)) {
                $msg = sprintf('Config for invokable service "%s" must be string data type', $serviceName);
                throw new Exception\UnexpectedValueException($msg);
            }
            $isShare = isset($shared[$serviceName]) ? (bool) $shared[$serviceName] : true;
            $this->diFactory->set($serviceName, $serviceClassName, $isShare);
        }
        return $this;
    }