示例#1
0
        /// <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));
        }
示例#2
0
 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()));
 }
示例#4
0
 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()));
        }