public async Task <object> Resolve(FederatedResolveContext context) { return(await _resolver(context)); }
public async Task <object> Resolve(FederatedResolveContext context) { return(await _resolver(context).ConfigureAwait(false)); }
private void AddRootEntityFields(ISchema schema) { var query = schema.Query; if (query == null) { schema.Query = query = new ObjectGraphType { Name = "Query" }; } query.Field("_service", new NonNullGraphType(new GraphQLTypeReference("_Service")), resolve: context => new {}); var representationsType = new NonNullGraphType(new ListGraphType(new NonNullGraphType(new GraphQLTypeReference("_Any")))); query.FieldAsync( "_entities", new NonNullGraphType(new ListGraphType(new GraphQLTypeReference("_Entity"))), arguments: new QueryArguments(new QueryArgument(representationsType) { Name = "representations" }), resolve: async context => { AddTypeNameToSelection(context.FieldAst, context.Document); var reps = context.GetArgument <List <Dictionary <string, object> > >("representations"); var results = new List <object>(); foreach (var rep in reps) { var typeName = rep["__typename"].ToString(); var type = context.Schema.FindType(typeName); if (type != null) { // execute resolver var resolver = type.GetMetadata <IFederatedResolver>(ResolverMetadataField); if (resolver != null) { var resolveContext = new FederatedResolveContext { Arguments = rep, ParentFieldContext = context }; var result = await resolver.Resolve(resolveContext).ConfigureAwait(false); results.Add(result); } else { results.Add(rep); } } else { // otherwise return the representation results.Add(rep); } } return(results); }); }