コード例 #1
0
 public void SetParentResolverInfo(ResolverInfo parentResolverInfo)
 {
     if (parentResolverInfo != null && ParentResolverInfo == null)
     {
         ParentResolverInfo = parentResolverInfo;
     }
 }
コード例 #2
0
 public object Filter(ResolverInfo context, PropertyInfo propertyInfo, string name, object value)
 {
     foreach (var filter in PropertyFilters)
     {
         value = filter(context, propertyInfo, name, value);
     }
     return(value);
 }
コード例 #3
0
        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());
        }
コード例 #4
0
 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]);
 }
コード例 #5
0
        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);
        }