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); }
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; }
public RequestCoreMiddlewareContext( NameString schemaName, IServiceProvider services, IServiceProvider schemaServices, IRequestExecutorOptionsAccessor options) { SchemaName = schemaName; Services = services; SchemaServices = schemaServices; Options = options; }
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; }
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))); }
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); }
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); }