//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); } }
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); } }
/// <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); } } }
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; } }
/// <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)); }
/// <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)); }