Esempio n. 1
0
        public static GraphArgumentInfo ShouldHaveArgumentWithName(this GraphFieldInfo field, string argumentName)
        {
            var arg = field.Arguments.FirstOrDefault(a => a.Name == argumentName);

            Assert.IsNotNull(arg);
            return(arg);
        }
Esempio n. 2
0
        private GraphFieldInfo DeriveField(MemberInfo memberInfo)
        {
            var field = new GraphFieldInfo(_typeResolver, memberInfo);

            var propertyInfo = memberInfo as PropertyInfo;

            if (propertyInfo != null)
            {
                field.Type = GetType(propertyInfo.PropertyType.GetTypeInfo());
            }

            var fieldInfo = memberInfo as FieldInfo;

            if (fieldInfo != null)
            {
                field.Type = GetType(fieldInfo.FieldType.GetTypeInfo());
            }

            var methodInfo = memberInfo as MethodInfo;

            if (methodInfo != null)
            {
                field.Type = GetType(methodInfo.ReturnType.GetTypeInfo());
                field.Arguments.AddRange(GetArguments(methodInfo));
            }

            _metaDataHandler.DeriveMetaData(field, memberInfo);
            return(field);
        }
        private object GetValue(GraphFieldInfo fieldInfo, IResolutionContext context)
        {
            var source       = GetSource(fieldInfo, context);
            var propertyInfo = fieldInfo.AttributeProvider as PropertyInfo;

            return(propertyInfo?.GetValue(source));
        }
 private FieldType DeriveField(GraphFieldInfo fieldInfo)
 {
     if (fieldInfo.Type.IsObservable)
     {
         var resolver = new Resolvers.EventStreamResolver(fieldInfo);
         return(new EventStreamFieldType
         {
             Name = fieldInfo.Name,
             Description = fieldInfo.Description,
             DeprecationReason = fieldInfo.DeprecationReason,
             DefaultValue = fieldInfo.DefaultValue,
             Type = GetType(fieldInfo.Type),
             Arguments = new QueryArguments(fieldInfo.Arguments.Where(arg => !arg.IsInjected).Select(DeriveArgument)),
             Resolver = resolver,
             Subscriber = resolver
         });
     }
     return(new FieldType
     {
         Name = fieldInfo.Name,
         Description = fieldInfo.Description,
         DeprecationReason = fieldInfo.DeprecationReason,
         DefaultValue = fieldInfo.DefaultValue,
         Type = GetType(fieldInfo.Type),
         Arguments = new QueryArguments(fieldInfo.Arguments.Where(arg => !arg.IsInjected).Select(DeriveArgument)),
         Resolver = FieldResolverFactory(fieldInfo),
     });
 }
Esempio n. 5
0
 public override void MapField(GraphFieldInfo fieldInfo, MemberInfo memberInfo)
 {
     if (ChaosAttribute.IsEnabled)
     {
         fieldInfo.ExecutionFilters.Add(new ChaosAttribute());
     }
 }
Esempio n. 6
0
        private GraphFieldInfo DeriveField(MemberInfo memberInfo)
        {
            var field = new GraphFieldInfo(_typeResolver, memberInfo);

            _metaDataHandler.DeriveMetaData(field, memberInfo);

            if (!field.IsIgnored)
            {
                if (memberInfo is PropertyInfo propertyInfo)
                {
                    field.Type = GetType(propertyInfo.PropertyType.GetTypeInfo());
                }

                if (memberInfo is FieldInfo fieldInfo)
                {
                    field.Type = GetType(fieldInfo.FieldType.GetTypeInfo());
                }

                if (memberInfo is MethodInfo methodInfo)
                {
                    field.Type = GetType(methodInfo.ReturnType.GetTypeInfo());
                    field.Arguments.AddRange(GetArguments(methodInfo));
                }
            }
            return(field);
        }
Esempio n. 7
0
        private object CallMethod(GraphFieldInfo fieldInfo, IResolutionContext context)
        {
            var source     = GetSource(fieldInfo, context);
            var methodInfo = fieldInfo.AttributeProvider as MethodInfo;

            var arguments = fieldInfo
                            .Arguments
                            .Select(arg => context.GetArgument(arg.Name, arg.DefaultValue));

            return(methodInfo?.Invoke(source, arguments.ToArray()));
        }
Esempio n. 8
0
 private FieldType DeriveField(GraphFieldInfo fieldInfo)
 {
     return(new FieldType
     {
         Name = fieldInfo.Name,
         Description = fieldInfo.Description,
         DeprecationReason = fieldInfo.DeprecationReason,
         DefaultValue = fieldInfo.DefaultValue,
         Type = GetType(fieldInfo.Type),
         Arguments = new QueryArguments(fieldInfo.Arguments.Where(arg => !arg.IsInjected).Select(DeriveArgument)),
         Resolver = FieldResolverFactory(fieldInfo),
     });
 }
Esempio n. 9
0
 private object GetSource(GraphFieldInfo fieldInfo, IResolutionContext context)
 {
     var source = context.Source;
     if (source == null ||
         source.GetType() == typeof(ImplementViewerAttribute.QueryViewer) ||
         source.GetType() == typeof(ImplementViewerAttribute.MutationViewer) ||
         source.GetType() == typeof(ImplementViewerAttribute.SubscriptionViewer))
     {
         var declaringType = fieldInfo.DeclaringType.TypeRepresentation.AsType();
         source = context.DependencyInjector?.Resolve(declaringType.GetTypeInfo()) ?? fieldInfo.SchemaInfo.TypeResolutionDelegate(declaringType);
     }
     source = Unwrapper.Unwrap(source);
     return source;
 }
Esempio n. 10
0
        private object CallMethod(GraphFieldInfo fieldInfo, IResolutionContext context)
        {
            var source     = GetSource(fieldInfo, context);
            var methodInfo = fieldInfo.AttributeProvider as MethodInfo;

            var arguments = fieldInfo
                            .Arguments
                            .Select(arg => context.GetArgument(arg));

            if (fieldInfo.IsExtensionMethod)
            {
                arguments = new[] { source }.Concat(arguments);
            }

            return(methodInfo?.Invoke(source, arguments.ToArray()));
        }
Esempio n. 11
0
        private FieldType DeriveField(GraphFieldInfo fieldInfo)
        {
            if (fieldInfo.Type.TypeRepresentation.IsSubclassOfRawGeneric(typeof(IObservable <>)))
            {
                var wrappedType = fieldInfo.Type.TypeRepresentation.GenericTypeArguments[0];

                var        argParam   = Expression.Parameter(typeof(ResolveFieldContext), "context");
                Expression expression = Expression.Property(argParam, nameof(ResolveFieldContext.Source));
                expression = Expression.Convert(expression, wrappedType);
                var @delegate = Expression.Lambda(expression, argParam).Compile();

                var resolver = typeof(FuncFieldResolver <>).MakeGenericType(wrappedType).GetConstructors().First()
                               ?.Invoke(new object[]
                {
                    @delegate
                });

                var method = fieldInfo.DeclaringType.TypeRepresentation.DeclaredMethods.First(x =>
                                                                                              x.Name.Equals(fieldInfo.Name, StringComparison.OrdinalIgnoreCase));
                if (method.GetParameters().Length == 1 && method.GetParameters()[0].ParameterType != typeof(ResolveEventStreamContext))
                {
                    throw new ArgumentException("Subscription must only have one param of type ResolveEventStreamContext");
                }
                var @delegate1 = method.CreateDelegate(typeof(Func <,>).MakeGenericType(typeof(ResolveEventStreamContext), fieldInfo.Type.TypeRepresentation), null);
                var subscriber = typeof(EventStreamResolver <>).MakeGenericType(wrappedType).GetConstructors().First()
                                 .Invoke(new object[] { @delegate1 });
                return(new EventStreamFieldType
                {
                    Name = fieldInfo.Name,
                    Type = this._typeDescriptors.GetEntity(wrappedType).GetType(),
                    Resolver = resolver as IFieldResolver,
                    Subscriber = subscriber as IEventStreamResolver
                });
            }
            return(new FieldType
            {
                Name = fieldInfo.Name,
                Description = fieldInfo.Description,
                DeprecationReason = fieldInfo.DeprecationReason,
                DefaultValue = fieldInfo.DefaultValue,
                Type = GetType(fieldInfo.Type),
                Arguments = new QueryArguments(fieldInfo.Arguments.Where(arg => !arg.IsInjected).Select(DeriveArgument)),
                Resolver = FieldResolverFactory(fieldInfo),
            });
        }
        private object CallMethod(GraphFieldInfo fieldInfo, IResolutionContext context)
        {
            var source     = GetSource(fieldInfo, context);
            var methodInfo = fieldInfo.AttributeProvider as MethodInfo;

            var arguments = fieldInfo
                            .Arguments
                            .Select(arg => context.GetArgument(arg));

            if (fieldInfo.Type.IsTask)
            {
                var argumentTypes     = methodInfo.GetParameters().Select(p => p.ParameterType).ToList();
                var argumentConstants = arguments.Select((arg, i) => Expression.Constant(arg, argumentTypes[i]));
                var methodCall        = Expression.Call(Expression.Constant(source), methodInfo, argumentConstants);
                var resolutionTask    = Expression.Lambda(methodCall).Compile();
                return(Task.Run(() => AsyncHelpers.RunTask(resolutionTask, fieldInfo.Type.TypeParameter())));
            }

            return(methodInfo?.Invoke(source, arguments.ToArray()));
        }
Esempio n. 13
0
 public virtual void MapField(GraphFieldInfo fieldInfo, MemberInfo memberInfo)
 {
 }
 public WrappedSyncFieldResolver(GraphFieldInfo fieldInfo)
 {
     _fieldInfo = fieldInfo;
 }
Esempio n. 15
0
 public FieldResolver(GraphFieldInfo fieldInfo)
 {
     _fieldInfo = fieldInfo;
 }
 public override void MapField(GraphFieldInfo fieldInfo, MemberInfo memberInfo)
 {
     fieldInfo.DefaultValue = _defaultValue;
 }
 public EventStreamResolver(GraphFieldInfo fieldInfo) : base(fieldInfo)
 {
 }
Esempio n. 18
0
 public void MapField(GraphFieldInfo entity, MemberInfo memberInfo)
 {
     HasMappedField = true;
 }
Esempio n. 19
0
 public void MapEnumMember(GraphFieldInfo entity, FieldInfo fieldInfo)
 {
     HasMappedEnumMember = true;
 }
Esempio n. 20
0
 public virtual void MapEnumMember(GraphFieldInfo entity, FieldInfo fieldInfo)
 {
 }
Esempio n. 21
0
 public override void MapField(GraphFieldInfo entity, MemberInfo memberInfo)
 {
     entity.DefaultValue = _defaultValue;
 }
Esempio n. 22
0
        public static void ShouldNotHaveArgumentWithName(this GraphFieldInfo field, string argumentName)
        {
            var arg = field.Arguments.FirstOrDefault(a => a.Name == argumentName);

            Assert.IsNull(arg);
        }
Esempio n. 23
0
 public override void MapField(GraphFieldInfo fieldInfo, MemberInfo memberInfo)
 {
     fieldInfo.Name = _nameNormalizer.AsFieldName(memberInfo.Name);
 }
Esempio n. 24
0
 public virtual void MapField(GraphFieldInfo entity, MemberInfo memberInfo)
 {
 }
Esempio n. 25
0
 public ResolutionContext(GraphFieldInfo fieldInfo, ResolveFieldContext <object> fieldContext)
 {
     FieldContext = fieldContext;
     FieldInfo    = fieldInfo;
 }
Esempio n. 26
0
 public override void MapEnumMember(GraphFieldInfo entity, FieldInfo fieldInfo)
 {
     entity.Name = _nameNormalizer.AsEnumMemberName(fieldInfo.Name);
 }