private static function getServiceOrModel(
        array &$aTrackerArray,
        string $sType,
        string $sName,
        string $sComponent,
        array $aParamaters
    ): object {
        /**
         * We track them like this because we need to return the instance of the
         * item, not the closure. If we don't do this then we will always get
         * a new instance of the item, which is undesireable.
         */

        $sKey = md5($sComponent . $sName);

        if (!array_key_exists($sKey, $aTrackerArray)) {

            $aTrackerArray[$sKey] = call_user_func_array(
                self::getService($sType, $sName, $sComponent),
                $aParamaters
            );

        } elseif (!empty($aParamaters)) {
            trigger_error(
                'A call to Factory::' . $sType . '(' . $sName . ') passed construction paramaters, but the object has already been constructed'
            );
        }

        return $aTrackerArray[$sKey];
    }