コード例 #1
0
        private static List <IParameterHandler> CreateFactoryParameterHandlers(
            Expression context,
            IRequestExecutorOptionsAccessor options)
        {
            Expression schemaName       = Expression.Property(context, _getSchemaName);
            Expression services         = Expression.Property(context, _appServices);
            Expression schemaServices   = Expression.Property(context, _schemaServices);
            Expression validatorFactory = Expression.Convert(Expression.Call(
                                                                 services, _getService, Expression.Constant(_validatorFactory)), _validatorFactory);
            Expression getValidator = Expression.Call(
                validatorFactory, _createValidator, schemaName);

            var list = new List <IParameterHandler>();

            list.Add(new TypeParameterHandler(typeof(IDocumentValidator), getValidator));
            AddService <IActivator>(list, schemaServices);
            AddService <IErrorHandler>(list, schemaServices);
            AddService <IDiagnosticEvents>(list, schemaServices);
            AddService <QueryExecutor>(list, schemaServices);
            AddService <MutationExecutor>(list, schemaServices);
            AddService <SubscriptionExecutor>(list, schemaServices);
            AddOptions(list, options);
            list.Add(new SchemaNameParameterHandler(schemaName));
            list.Add(new ServiceParameterHandler(services));
            return(list);
        }
コード例 #2
0
 private static List<IParameterHandler> CreateDelegateParameterHandlers(
     Expression context,
     IRequestExecutorOptionsAccessor options)
 {
     var list = new List<IParameterHandler>();
     AddOptions(list, options);
     list.Add(new ServiceParameterHandler(Expression.Property(context, _requestServices)));
     return list;
 }
コード例 #3
0
 public RequestCoreMiddlewareContext(
     NameString schemaName,
     IServiceProvider services,
     IServiceProvider schemaServices,
     IRequestExecutorOptionsAccessor options)
 {
     SchemaName     = schemaName;
     Services       = services;
     SchemaServices = schemaServices;
     Options        = options;
 }
コード例 #4
0
    public TimeoutMiddleware(
        RequestDelegate next,
        IRequestExecutorOptionsAccessor options)
    {
        if (options is null)
        {
            throw new ArgumentNullException(nameof(options));
        }

        _next    = next ?? throw new ArgumentNullException(nameof(next));
        _timeout = options.ExecutionTimeout;
    }
コード例 #5
0
 private static void AddOptions(
     IList <IParameterHandler> parameterHandlers,
     IRequestExecutorOptionsAccessor options)
 {
     parameterHandlers.Add(new TypeParameterHandler(
                               typeof(IDocumentCacheSizeOptionsAccessor),
                               Expression.Constant(options)));
     parameterHandlers.Add(new TypeParameterHandler(
                               typeof(IErrorHandlerOptionsAccessor),
                               Expression.Constant(options)));
     parameterHandlers.Add(new TypeParameterHandler(
                               typeof(IInstrumentationOptionsAccessor),
                               Expression.Constant(options)));
     parameterHandlers.Add(new TypeParameterHandler(
                               typeof(IRequestExecutorOptionsAccessor),
                               Expression.Constant(options)));
 }
コード例 #6
0
        private static List <IParameterHandler> CreateFactoryParameterHandlers(
            Expression context,
            IRequestExecutorOptionsAccessor options,
            Type middleware)
        {
            Expression schemaName       = Expression.Property(context, _getSchemaName);
            Expression services         = Expression.Property(context, _appServices);
            Expression schemaServices   = Expression.Property(context, _schemaServices);
            Expression validatorFactory = Expression.Convert(Expression.Call(
                                                                 services, _getService, Expression.Constant(_validatorFactory)), _validatorFactory);
            Expression getValidator = Expression.Call(
                validatorFactory, _createValidator, schemaName);

            var list = new List <IParameterHandler>
            {
                new TypeParameterHandler(typeof(IDocumentValidator), getValidator)
            };

            ConstructorInfo?constructor =
                middleware.GetConstructors().SingleOrDefault(t => t.IsPublic);

            if (constructor is not null)
            {
                foreach (ParameterInfo parameter in constructor.GetParameters()
                         .Where(p => p.IsDefined(typeof(SchemaServiceAttribute))))
                {
                    AddService(list, schemaServices, parameter.ParameterType);
                }
            }

            AddService <IActivator>(list, schemaServices);
            AddService <IErrorHandler>(list, schemaServices);
            AddService <IDiagnosticEvents>(list, schemaServices);
            AddService <IWriteStoredQueries>(list, schemaServices);
            AddService <IReadStoredQueries>(list, schemaServices);
            AddService <QueryExecutor>(list, schemaServices);
            AddService <MutationExecutor>(list, schemaServices);
            AddService <IEnumerable <ISelectionOptimizer> >(list, schemaServices);
            AddService <SubscriptionExecutor>(list, schemaServices);
            AddOptions(list, options);
            list.Add(new SchemaNameParameterHandler(schemaName));
            list.Add(new ServiceParameterHandler(services));
            return(list);
        }
コード例 #7
0
        private RequestDelegate CreatePipeline(
            NameString schemaName,
            IList <RequestCoreMiddleware> pipeline,
            IServiceProvider schemaServices,
            IRequestExecutorOptionsAccessor options)
        {
            if (pipeline.Count == 0)
            {
                pipeline.AddDefaultPipeline();
            }

            var factoryContext = new RequestCoreMiddlewareContext(
                schemaName, _applicationServices, schemaServices, options);

            RequestDelegate next = context => default;

            for (var i = pipeline.Count - 1; i >= 0; i--)
            {
                next = pipeline[i](factoryContext, next);
            }

            return(next);
        }