public void SetParentResolverInfo(ResolverInfo parentResolverInfo) { if (parentResolverInfo != null && ParentResolverInfo == null) { ParentResolverInfo = parentResolverInfo; } }
public object Filter(ResolverInfo context, PropertyInfo propertyInfo, string name, object value) { foreach (var filter in PropertyFilters) { value = filter(context, propertyInfo, name, value); } return(value); }
private static object[] GetArgumentValues(MethodInfo methodInfo, IContainer container, ResolveFieldContext <object> context, ResolverInfo resolverInfo) { var arguments = new List <object>(); var sourceType = context.Source.GetType(); foreach (var parameterInfo in methodInfo.GetParameters()) { if (parameterInfo.ParameterType == typeof(IContainer)) { arguments.Add(container); } else if (parameterInfo.ParameterType == typeof(IEnumerable <Field>)) { arguments.Add(context.FieldAst.SelectionSet.Selections.OfType <Field>()); } else if (parameterInfo.ParameterType.IsAssignableFrom(sourceType)) { arguments.Add(context.Source); } else if (typeof(ResolverInfo).IsAssignableFrom(parameterInfo.ParameterType)) { arguments.Add(resolverInfo); } else { var argName = parameterInfo.Name.ToCamelCase(); var argValue = context.Arguments.ContainsKey(argName) ? context.Arguments[argName] : null; arguments.Add(argValue); } } return(arguments.ToArray()); }
private ResolverInfo CreateResolverInfo(ResolveFieldContext <object> context, object source, ResolverInfo parentResolverInfo) { if (!_resolverInfo.ContainsKey(source)) { _resolverInfo[source] = (ResolverInfo)Activator.CreateInstance(typeof(ResolverInfo), context, source); } _resolverInfo[source].SetParentResolverInfo(parentResolverInfo); return(_resolverInfo[source]); }
public IEnumerable <ResolverInfo> Create(ResolveFieldContext <object> context, object source, ResolverInfo parentResolverInfo) { if (source == null) { source = context.Source; } if (source == null) { return(null); } var output = new List <ResolverInfo>(); var sourceType = source.GetType(); var isArray = sourceType.IsArray; var isEnumerable = sourceType != typeof(string) && sourceType.GetInterfaces().Any(t => t.Name.Contains(nameof(IEnumerable))); if (isArray || isEnumerable) { var items = (IEnumerable)source; foreach (var item in items) { output.Add(CreateResolverInfo(context, item, parentResolverInfo)); } } else { output.Add(CreateResolverInfo(context, source, parentResolverInfo)); } return(output); }