Beispiel #1
0
        /// <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="settings"></param>
        public void InitFromConfiguration(ExpressionDictionarySettings settings)
        {
            settings.NullCheck("settings");

            foreach (ExpressionDictionaryConfigurationElement element in settings.Dictionaries)
            {
                this.Add(new ExpressionDictionary(element));
            }
        }
        /// <summary>
        /// 获得表达式预定义字典的配置信息
        /// </summary>
        /// <returns></returns>
        public static ExpressionDictionarySettings GetConfig()
        {
            ExpressionDictionarySettings settings = (ExpressionDictionarySettings)ConfigurationBroker.GetSection("expressionDictionarySettings");

            if (settings == null)
            {
                settings = new ExpressionDictionarySettings();
            }

            return(settings);
        }