protected ExpressionElement BuildCurrentExpressionElement(MethodInfo methodInfo, ExpressionAttribute expressionAttribute) { if (ExpressionServices.ContainsKey(expressionAttribute.Key)) { throw new Exception(string.Format("The expression service with key '{0}' has already existed.", expressionAttribute.Key)); } var parameters = methodInfo.GetParameters(); if (parameters.Length == 1 && typeof(IExpression).IsAssignableFrom(parameters[0].ParameterType)) { var func = (Func <IExpression, object>)Delegate.CreateDelegate(typeof(Func <IExpression, object>), this, methodInfo); ExpressionServices.Add(expressionAttribute.Key, func); } expressionAttribute.Name = (string.IsNullOrEmpty(expressionAttribute.Name)) ? methodInfo.Name : expressionAttribute.Name; var exp = new ExpressionElement { ReturnDataType = expressionAttribute.ReturnDataType, Description = expressionAttribute.Description, Filter = expressionAttribute.Filter, Key = expressionAttribute.Key, Name = expressionAttribute.Name, AssemblyName = this.GetType().Assembly.ManifestModule.Name, IsDynamic = expressionAttribute.IsDynamic, InheritDataType = expressionAttribute.InheritDataType }; return(exp); }
protected void BuildCurrentExpressionParameterElement(ExpressionElement exp, ExpressionTemplateAttribute templateAttribute, ExpressionParameterAttribute parameterAttribute) { var key = string.Format("{0}.{1}", templateAttribute.Key, parameterAttribute.Name); if (TemplateDic.ContainsKey(key)) { TemplateDic.TryGetValue(key, out exp); } else { if (parameterAttribute != null) { foreach (var item in exp.Parameters) { //exp.Parameters.Add(new ExpressionParameterElement() { Default = ""}); TemplateDic.Add(key, exp); } } } }
private void BuildExpressionParameterElement(ExpressionElement exp, object[] expreesionTemplateAttribute, object[] paramterAttributes) { if (expreesionTemplateAttribute.Length > 0) { var templateAttribute = expreesionTemplateAttribute.SingleOrDefault() as ExpressionTemplateAttribute; foreach (var o in paramterAttributes) { var parameterAttribute = o as ExpressionParameterAttribute; BuildCurrentExpressionParameterElement(exp, templateAttribute, parameterAttribute); } } else { foreach (var o in paramterAttributes) { var parameterAttribute = o as ExpressionParameterAttribute; BuildDefaultExpressionParameterElement(exp, parameterAttribute); } } }
protected void BuildDefaultExpressionParameterElement(ExpressionElement exp, ExpressionParameterAttribute expressionParameterAttribute) { if (expressionParameterAttribute != null) { exp.Parameters.Add(new ExpressionParameterElement { DataType = expressionParameterAttribute.DataType, Description = expressionParameterAttribute.Description, Filter = expressionParameterAttribute.Filter, Key = expressionParameterAttribute.Name, Name = expressionParameterAttribute.Name, Default = expressionParameterAttribute.Default, DefaultExpression = expressionParameterAttribute.DefaultExpression, Priority = expressionParameterAttribute.Priority, ManualExecute = expressionParameterAttribute.ManualExecute, EnumSourceTypeName = expressionParameterAttribute.EnumSource == null ? null : expressionParameterAttribute.EnumSource.AssemblyQualifiedName, DynamicTypeLoader = expressionParameterAttribute.DynamicTypeLoader, InheritDataType = expressionParameterAttribute.InheritDataType, }); } }