public ILogicEvaluator CreateEvaluator(IProcessExecutionContext executionContext, IRecordPointer <Guid> evaluatorId, ILogicEvaluatorType evaluatorType, string parameters, bool useCache = true)
        {
            string recordKey = CACHE_KEY + evaluatorId.Id.ToString();

            var cacheTimeout = useCache ? getCacheTimeout(executionContext) : null;

            useCache = useCache && executionContext.Cache != null && cacheTimeout != null;

            if (useCache && executionContext.Cache.Exists(recordKey))
            {
                return(executionContext.Cache.Get <ILogicEvaluator>(recordKey));
            }

            var serializedParameter = ParameterSerializer.CreateParamters(parameters);

            var evaluator = new LogicEvaluator(evaluatorType, serializedParameter);

            if (useCache)
            {
                executionContext.Cache.Add <ILogicEvaluator>(recordKey, evaluator, cacheTimeout.Value);
            }

            return(evaluator);
        }