예제 #1
0
        public static object[] BuildArguments(ParameterInfo[] parameters, IResolveFieldContext context)
        {
            if (parameters == null || parameters.Length == 0)
            {
                return(null);
            }

            object[] arguments = new object[parameters.Length];

            var index = 0;

            if (parameters[index].ParameterType.IsAssignableFrom(context.GetType()))
            {
                arguments[index] = context;
                index++;
            }

            if (parameters.Length > index &&
                context.Source != null &&
                (context.Source?.GetType() == parameters[index].ParameterType ||
                 string.Equals(parameters[index].Name, "source", StringComparison.OrdinalIgnoreCase)))
            {
                arguments[index] = context.Source;
                index++;
            }

            if (parameters.Length > index &&
                context.UserContext != null &&
                parameters[index].ParameterType.IsInstanceOfType(context.UserContext))
            {
                arguments[index] = context.UserContext;
                index++;
            }

            foreach (var parameter in parameters.Skip(index))
            {
                arguments[index] = context.GetArgument(parameter.ParameterType, parameter.Name);
                index++;
            }

            return(arguments);
        }