Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        /// <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();
            }
        }
Exemplo n.º 3
0
		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);
			}
		}