/// <summary> /// 计算表达式字典 /// </summary> /// <param name="strFuncName"></param> /// <param name="arrParams"></param> /// <param name="calcContext"></param> /// <returns></returns> private static object CalculateExpressionDictionary(string strFuncName, ParamObjectCollection arrParams, CalculateContext calcContext) { ExpressionDictionaryCollection dictionaries = (ExpressionDictionaryCollection)ObjectContextCache.Instance.GetOrAddNewValue( "ExpressionDictionaries", (cache, key) => { ExpressionDictionaryCollection expDicts = new ExpressionDictionaryCollection(); expDicts.InitFromConfiguration(ExpressionDictionarySettings.GetConfig()); cache.Add("ExpressionDictionaries", expDicts); return(expDicts); }); ExpressionDictionary dictionary = dictionaries[strFuncName]; object oValue = null; if (dictionary != null) { ExpressionDictionaryCalculatorContext context = new ExpressionDictionaryCalculatorContext(dictionary, calcContext.CallerContxt); string key = string.Empty; if (arrParams.Count > 0 && arrParams[0].Value != null) { key = arrParams[0].Value.ToString(); } oValue = dictionary.Calculator.Calculate(strFuncName, key, context); } return(oValue); }
/// <summary> /// 构造方法 /// </summary> /// <param name="dictionaryInfo"></param> /// <param name="callerContext"></param> internal ExpressionDictionaryCalculatorContext(ExpressionDictionary dictionaryInfo, object callerContext) { dictionaryInfo.NullCheck("dictionaryInfo"); this.DictionaryInfo = dictionaryInfo; this.CallerContext = callerContext; }