/// <summary> /// Adds the ability for this test server to raise subscription events. /// </summary> /// <typeparam name="TSchema">The type of schema being configured.</typeparam> /// <param name="serverBuilder">The server builder.</param> /// <returns>GraphQL.AspNet.Interfaces.Configuration.ISchemaBuilder<TSchema>.</returns> public static TestServerBuilder <TSchema> AddSubscriptionPublishing <TSchema>(this TestServerBuilder <TSchema> serverBuilder) where TSchema : class, ISchema { serverBuilder.AddSchemaBuilderAction(builder => { var extension = new SubscriptionPublisherSchemaExtension <TSchema>(); builder.Options.RegisterExtension(extension); builder.QueryExecutionPipeline.AddMiddleware <PublishRaisedSubscriptionEventsMiddleware <TSchema> >(); builder.AsServiceCollection().TryAddSingleton <SubscriptionPublicationService>(); builder.AsServiceCollection().AddScoped <ISubscriptionEventPublisher, InProcessSubscriptionPublisher>(); }); return(serverBuilder); }
public void GeneralPropertyCheck() { using var restorePoint = new GraphQLProviderRestorePoint(); GraphQLProviders.TemplateProvider = null; var primaryOptions = new SchemaOptions <GraphSchema>(); var subscriptionOptions = new SubscriptionServerOptions <GraphSchema>(); var extension = new SubscriptionPublisherSchemaExtension <GraphSchema>(); extension.Configure(primaryOptions); Assert.IsTrue(primaryOptions.DeclarationOptions.AllowedOperations.Contains(GraphCollection.Subscription)); Assert.IsTrue(GraphQLProviders.TemplateProvider is SubscriptionEnabledTemplateProvider); }
/// <summary> /// Adds the ability for this graphql server to raise subscription events that can be published. /// </summary> /// <typeparam name="TSchema">The type of schema being configured.</typeparam> /// <param name="schemaBuilder">The schema builder.</param> /// <returns>GraphQL.AspNet.Interfaces.Configuration.ISchemaBuilder<TSchema>.</returns> public static ISchemaBuilder <TSchema> AddSubscriptionPublishing <TSchema>( this ISchemaBuilder <TSchema> schemaBuilder) where TSchema : class, ISchema { var extension = new SubscriptionPublisherSchemaExtension <TSchema>(); // register the in-process publisher to the service collection before // if one is not already registered var defaultPublisher = CreateDefaultSubscriptionPublisherDescriptor(); extension.OptionalServices.Add(defaultPublisher); // register the internal queueing mechanism that will asyncrounously transfer // raised events from controller methods to the registered subscription publisher schemaBuilder.AsServiceCollection().AddSingleton <SubscriptionEventQueue>(); schemaBuilder.AsServiceCollection().AddHostedService <SubscriptionPublicationService>(); schemaBuilder.AsServiceCollection().TryAdd(CreateDefaultSubscriptionRouterDescriptor()); schemaBuilder.Options.RegisterExtension(extension); schemaBuilder.QueryExecutionPipeline.AddMiddleware <PublishRaisedSubscriptionEventsMiddleware <TSchema> >( ServiceLifetime.Singleton); return(schemaBuilder); }