/// <summary> /// Resolves the value the current selection node. /// </summary> /// <param name="context">The <see cref="T:Dora.GraphQL.GraphTypes.ResolverContext" /> in which the field value is resoved.</param> /// <returns> /// The resolved field's value. /// </returns> public async ValueTask <object> ResolveAsync(ResolverContext context) { var arguments = new object[_operation.Parameters.Count]; var index = 0; foreach (var parameter in _operation.Parameters.Values) { var bindingContext = new ArgumentBinderContext(parameter, context); var result = await _binder.BindAsync(bindingContext); var value = result.IsArgumentBound ? result.Value : parameter.ParameterInfo.DefaultValue; arguments[index++] = value; } var serviceProvider = context.GraphContext.RequestServices; var service = ActivatorUtilities.CreateInstance(serviceProvider, _operation.Service.ServiceType); var returnType = _executor.MethodInfo.ReturnType; if (typeof(Task).IsAssignableFrom(returnType) || (returnType.IsGenericType && returnType.GetGenericTypeDefinition() == typeof(ValueTask <>))) { return(await _executor.ExecuteAsync(service, arguments)); } return(_executor.Execute(service, arguments)); }
public ValueTask <ArgumentBindingResult> BindAsync(ArgumentBinderContext context) { if (context.Parameter.ParameterInfo.ParameterType == typeof(HttpContext)) { var httpContext = _httpContextAccessor.HttpContext; return(new ValueTask <ArgumentBindingResult>(ArgumentBindingResult.Success(httpContext))); } return(new ValueTask <ArgumentBindingResult>(ArgumentBindingResult.Failed())); }
public ValueTask <ArgumentBindingResult> BindAsync(ArgumentBinderContext context) { if (context.Parameter.ParameterInfo.ParameterType == typeof(CancellationToken)) { var requestAborted = _httpContextAccessor.HttpContext.RequestAborted; return(new ValueTask <ArgumentBindingResult>(ArgumentBindingResult.Success(requestAborted))); } return(new ValueTask <ArgumentBindingResult>(ArgumentBindingResult.Failed())); }
public ValueTask <ArgumentBindingResult> BindAsync(ArgumentBinderContext context) { if (context.Parameter.ParameterInfo.ParameterType == typeof(GraphContext)) { var graphContext = _httpContextAccessor.HttpContext.Features.Get <IGraphContextFeature>().GraphContext; return(new ValueTask <ArgumentBindingResult>(ArgumentBindingResult.Success(graphContext))); } return(new ValueTask <ArgumentBindingResult>(ArgumentBindingResult.Failed())); }
public ValueTask <ArgumentBindingResult> BindAsync(ArgumentBinderContext context) { var serviceProvider = context.ResolverContext.GraphContext.RequestServices; var type = context.Parameter.ParameterInfo.ParameterType; var argumentValue = serviceProvider.GetService(type); if (null != argumentValue) { return(new ValueTask <ArgumentBindingResult>(ArgumentBindingResult.Success(argumentValue))); } return(new ValueTask <ArgumentBindingResult>(ArgumentBindingResult.Failed())); }