internal List <RequestParameter> GetParameters(List <RequestParameter> parameters, string action,
                                                       IController controller)
        {
            LogController.WriteLog(new ServerLog($"Checking parameter list form action '{controller.GetType().Name}.{action}'...", controller.GetType().Name, action));
            if (parameters == null)
            {
                return(new List <RequestParameter>());
            }

            string currentObjRpAlias       = string.Empty;
            Object entityParameterObject   = this;
            List <RequestParameter> result = new List <RequestParameter>();
            MethodInfo method = controller.GetType().GetMethod(action);

            foreach (RequestParameter parameter in parameters)
            {
                LogController.WriteLog(new ServerLog($"Setting parameter '{parameter.Name}' for action '{controller.GetType().Name}.{action}'...", controller.GetType().Name, action));
                string pName  = parameter.Name;
                string pValue = parameter.Value.ToString();

                RequestParameter requestParameter = null;

                foreach (ParameterInfo pInfo in method.GetParameters())
                {
                    ObjectRequestParameter objectRequestParameter = GetObjectParameterType(pName, action, controller.GetType().Name);
                    if (objectRequestParameter == null)
                    {
                        if (!pInfo.Name.Equals(pName))
                        {
                            continue;
                        }
                    }

                    // string objectParameterType = objRP.TypeName;

                    if (objectRequestParameter != null)
                    {
                        if (objectRequestParameter.Alias != currentObjRpAlias ||
                            entityParameterObject.GetType().Name.Equals(this.GetType().Name))
                        {
                            currentObjRpAlias = objectRequestParameter.Alias;

                            ModelRegister model = Server.GlobalInstance.RegisteredModels.FirstOrDefault(m => m.ModeName == objectRequestParameter.TypeName);
                            if (model == null)
                            {
                                LogController.WriteLog(new ServerLog($"Could not instantiate controller '{objectRequestParameter.TypeName}'. Check its mapping XML.", controller.GetType().Name, action, ServerLogType.ERROR));
                                throw new Exception($"Could not instantiate controller '{objectRequestParameter.TypeName}'. Check its mapping XML.");
                            }

                            Type type = model.ModelType;
                            if (type == null)
                            {
                                LogController.WriteLog(new ServerLog($"Could not instantiate controller '{objectRequestParameter.TypeName}'. Check its mapping XML.", controller.GetType().Name, action, ServerLogType.ERROR));
                                throw new Exception($"Could not instantiate controller '{objectRequestParameter.TypeName}'. Check its mapping XML.");
                            }

                            entityParameterObject = Activator.CreateInstance(type);

                            string parameterMethodName = pName.Substring(0, pName.IndexOf('.'));
                            requestParameter = new RequestParameter(parameterMethodName, entityParameterObject);
                        }

                        int    ptIndex      = pName.IndexOf('.') + 1;
                        string propertyName = pName.Substring(ptIndex, pName.Length - ptIndex);

                        ConvertToType(entityParameterObject,
                                      propertyName, pValue);

                        continue;
                    }

                    requestParameter = GetRequestParameterFromType(pInfo, pName, pValue);
                    if (requestParameter != null)
                    {
                        break;
                    }
                }

                if (requestParameter != null)
                {
                    result.Add(requestParameter);
                }
            }
            return(result);
        }
示例#2
0
 internal void AddParameter(RequestParameter parameter)
 {
     requestParameters.Add(parameter);
 }