public SchemaObjectBase DoOperation(SCObjectOperationMode opMode, SchemaObjectBase data, SchemaObjectBase parent, bool deletedByContainer = false) { data.NullCheck("data"); SchemaOperationDefine sod = data.Schema.Operations[opMode]; (sod != null).FalseThrow("不能找到Schema类型为{0},操作为{1}的方法定义", data.SchemaType, opMode); return(this.DoOperation(sod, data, parent, deletedByContainer)); }
/// <summary> /// 执行操作 /// </summary> /// <param name="data">用于操作的<see cref="SchemaObjectBase"/>对象</param> /// <param name="parent">用于操作的父<see cref="SchemaObjectBase"/>对象</param> /// <param name="deletedByContainer">是否被容器删除</param> /// <returns></returns> private SchemaObjectBase DoOperation(SchemaOperationDefine sod, SchemaObjectBase data, SchemaObjectBase parent, bool deletedByContainer = false) { sod.NullCheck("sod"); sod.MethodName.CheckStringIsNullOrEmpty("MethodName"); Type type = this.GetType(); MethodInfo mi = type.GetMethod(sod.MethodName); (mi != null).FalseThrow("不能在类型{0}中找到方法{1}", type.FullName, sod.MethodName); object[] parameters = null; if (sod.HasParentParemeter || parent != null) { if (sod.OperationMode == SCObjectOperationMode.Delete) { parameters = new object[] { data, parent, deletedByContainer } } ; else { parameters = new object[] { data, parent } }; } else { parameters = new object[] { data } }; try { return((SchemaObjectBase)mi.Invoke(this, parameters)); } catch (TargetParameterCountException ex) { Exception realException = ex.GetRealException(); throw new ApplicationException(string.Format("调用方法{0}出现异常,参数个数为{1}: {2}", sod.MethodName, parameters.Length, realException.Message), realException); } catch (System.Exception ex) { throw ex.GetRealException(); } }
private SchemaObjectBase DoOperation(SchemaOperationDefine sod, SchemaObjectBase data, SchemaObjectBase parent, bool deletedByContainer) { sod.MethodName.CheckStringIsNullOrEmpty("MethodName"); Type type = this.GetType(); MethodInfo mi = type.GetMethod(sod.MethodName); (mi != null).FalseThrow("不能在类型{0}中找到方法{1}", type.FullName, sod.MethodName); object[] parameters = null; if (sod.HasParentParemeter || parent != null) { if (sod.OperationMode == SCObjectOperationMode.Delete) parameters = new object[] { data, parent, deletedByContainer }; else parameters = new object[] { data, parent }; } else parameters = new object[] { data }; try { return (SchemaObjectBase)mi.Invoke(this, parameters); } catch (TargetParameterCountException ex) { Exception realException = ex.GetRealException(); throw new ApplicationException(string.Format("调用方法{0}出现异常,参数个数为{1}: {2}", sod.MethodName, parameters.Length, realException.Message), realException); } }