Esempio n. 1
0
        //public void AddValidate(string name, IValidate validater, DynObject validateConfig)
        //{
        //    if (!string.IsNullOrEmpty(name) && validater != null && validateConfig != null)
        //    {
        //        _validater[name] = validater;
        //        _validateConfig[name] = validateConfig;
        //    }
        //}

        //public void ClearValidate()
        //{
        //    _validater.Clear();
        //    _validateConfig.Clear();
        //}

        //public void RemoveValidate(string name)
        //{
        //    _validater.Remove(name);
        //    _validateConfig.Remove(name);
        //}


        public DynClass GetStructName()
        {
            if (!string.IsNullOrEmpty(this.StructName))
            {
                if (_structClass == null || _structClass.Name != this.StructName)
                {
                    _structClass = DynTypeManager.GetClass(this.StructName);
                }
                return(_structClass);
            }
            return(null);
        }
        public DynMethodInstance(string interfaceName, string methodName)
        {
            DynMethod dynMethod = DynTypeManager.GetInterface(interfaceName).GetMethod(methodName);

            if (dynMethod == null)
            {
                throw new ApplicationException(string.Format("接口【{0}】下面找不到,方法名为【{1}】的方法", interfaceName, methodName));
            }

            _dynMethod = dynMethod;
            _fullName  = interfaceName + "_" + methodName;

            foreach (DynParameter dynParameter in _dynMethod.GetParameters())
            {
                SetDefaultValue(dynParameter);
            }
        }
Esempio n. 3
0
        public void RemoveRelation(DynProperty dynProperty)
        {
            if (dynProperty == null || !this.ContainsProperty(dynProperty.Name))
            {
                throw new ApplicationException("寻求关联的类不存在");
            }
            if (dynProperty.CollectionType == CollectionType.None && dynProperty.DynType == DynType.Struct)
            {
                DynClass relationDynClass = DynTypeManager.GetClass(dynProperty.StructName);
                if (relationDynClass == null)
                {
                    throw new ApplicationException(string.Format("类{0}的属性{1}所添加的关联类{2}不存在", this.Name, dynProperty.Name, dynProperty.StructName));
                }

                relationDynClass.RelationDynClassDict.Remove(this.Name);
                relationDynClass.RelationDynPropertyDict.Remove(this.Name);
            }
        }
Esempio n. 4
0
        /// <summary>
        /// 基于实体类型构造对象
        /// </summary>
        /// <param name="className">类名</param>
        /// <param name="isHaveDefualt">是否成带默认值的对象</param>
        public DynObject(string className, bool isHaveDefualt)
        {
            DynClass dynClass = DynTypeManager.GetClass(className);

            if (dynClass == null)
            {
                throw new ApplicationException(string.Format("不存在名称为{0}的动态类", className));
            }

            _dynClass = dynClass;

            if (isHaveDefualt)
            {
                var properties = _dynClass.GetProperties();
                foreach (DynProperty dynProperty in properties)
                {
                    SetDefaultValue(dynProperty);
                }
            }
        }
Esempio n. 5
0
        private void eval_AdditionalFunctionEventHandler(object sender, AdditionalFunctionEventArgs e)
        {
            object[] parameters = e.GetParameters();
            object   value;

            //检查是否在默认的函数库中
            switch (e.Name)
            {
            case "GetProperty":
                break;

            case "Get":
                if (Context == null)
                {
                    throw new ApplicationException("执行函数失败 上下文为空");
                }

                if (Context == null || parameters == null || parameters.Length < 1 || string.IsNullOrEmpty(parameters[0] as string))
                {
                    throw new ApplicationException("执行函数失败 入参输入为空");
                }
                if (!Context.TryGetValue(parameters[0] as string, out value))
                {
                    throw new ApplicationException("执行函数失败 获取上下文时 没有键为" + parameters[0] + "的值");
                }
                e.ReturnValue = value;
                return;

            default:
                string className = null;
                //检查是否在当前应用的函数库中
                if (DynStringResolver.MethodDict.TryGetValue(e.Name, out className))
                {
                    string methodName = e.Name;

                    Dictionary <string, object> dict = new Dictionary <string, object>();
                    DynClass function = DynTypeManager.GetFunction(className);

                    if (function == null)
                    {
                        throw new ApplicationException("执行函数失败 没有主键为" + className + "的函数类 请查看初始化");
                    }
                    DynMethod method = function.GetMethod(methodName);

                    DynParameter[] dynParameters = method.GetParameters();

                    for (int i = 0; i < dynParameters.Length; i++)
                    {
                        value = parameters.Length > i ? parameters[i] : null;

                        switch (dynParameters[i].CollectionType)
                        {
                        case CollectionType.None:
                            value = DynStringResolver.GetTrueType(value, dynParameters[i].DynType);
                            break;

                        case CollectionType.List:
                            IList valueList = value as IList;
                            for (int j = 0; j < valueList.Count; j++)
                            {
                                valueList[j] = DynStringResolver.GetTrueType(valueList[j], dynParameters[i].DynType);
                            }
                            break;

                        case CollectionType.Set:
                        case CollectionType.Map:
                            break;

                        default:
                            break;
                        }

                        dict.Add(dynParameters[i].Name, value);
                    }

                    e.ReturnValue = DynTypeManager.MethodHandler(null, className + "_" + methodName, dict);
                }
                else
                {
                    throw new ApplicationException("无此函数:" + e.Name);
                }
                break;
            }
        }
Esempio n. 6
0
 /// <summary>
 /// 调用实例方法
 /// </summary>
 /// <param name="methodName"></param>
 /// <param name="dicParams"></param>
 /// <returns></returns>
 public object Call(string methodName, Dictionary <string, object> dicParams)
 {
     return(DynTypeManager.MethodHandler(this, _dynClass.Name + "_" + methodName, dicParams));
 }
Esempio n. 7
0
 /// <summary>
 /// 方法调用
 /// </summary>
 /// <param name="className"></param>
 /// <param name="methodName"></param>
 /// <param name="dicParams"></param>
 /// <returns></returns>
 public static object Call(string className, string methodName, Dictionary <string, object> dicParams)
 {
     return(DynTypeManager.MethodHandler(null, className + "_" + methodName, dicParams));
 }