Skip to content

Commit dbb611c

Browse files
Pull out SchemaOptions configuration for easier access
1 parent 209439c commit dbb611c

File tree

5 files changed

+36
-21
lines changed

5 files changed

+36
-21
lines changed

src/HotChocolate/AspNetCore/src/AspNetCore/Warmup/RequestExecutorWarmupService.cs

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,14 @@ public async Task StartAsync(CancellationToken cancellationToken)
1313

1414
foreach (var schemaName in provider.SchemaNames)
1515
{
16-
// TODO: Maybe this isn't the best approach...
17-
var options = await executorOptionsMonitor.GetAsync(schemaName, cancellationToken);
18-
// var setup = optionsMonitor.Get(schemaName);
19-
//
20-
// var requestOptions = FusionRequestExecutorManager.CreateRequestOptions(setup);
16+
var setup = await executorOptionsMonitor.GetAsync(schemaName, cancellationToken);
17+
var options = RequestExecutorManager.CreateSchemaOptions(setup);
2118

22-
// if (!requestOptions.LazyInitialization)
23-
// {
24-
// var warmupTask = WarmupAsync(schemaName, cancellationToken);
25-
// warmupTasks.Add(warmupTask);
26-
// }
19+
if (!options.LazyInitialization)
20+
{
21+
var warmupTask = WarmupAsync(schemaName, cancellationToken);
22+
warmupTasks.Add(warmupTask);
23+
}
2724
}
2825

2926
await Task.WhenAll(warmupTasks).ConfigureAwait(false);

src/HotChocolate/Core/src/Execution/Configuration/RequestExecutorSetup.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public sealed class RequestExecutorSetup
1212
private readonly List<OnConfigureRequestExecutorOptionsAction> _onConfigureRequestExecutorOptionsHooks = [];
1313
private readonly List<RequestMiddlewareConfiguration> _pipeline = [];
1414
private readonly List<Action<IList<RequestMiddlewareConfiguration>>> _pipelineModifiers = [];
15+
private readonly List<Action<SchemaOptions>> _schemaOptionModifiers = [];
1516
private readonly List<OnConfigureSchemaServices> _onConfigureSchemaServicesHooks = [];
1617
private readonly List<OnRequestExecutorCreatedAction> _onRequestExecutorCreatedHooks = [];
1718
private readonly List<OnRequestExecutorEvictedAction> _onRequestExecutorEvictedHooks = [];
@@ -23,11 +24,6 @@ public sealed class RequestExecutorSetup
2324
/// </summary>
2425
public Schema? Schema { get; set; }
2526

26-
/// <summary>
27-
/// Gets or sets the schema builder that is used to create the schema.
28-
/// </summary>
29-
public ISchemaBuilder? SchemaBuilder { get; set; }
30-
3127
/// <summary>
3228
/// Gets or sets the request executor options.
3329
/// </summary>
@@ -97,6 +93,9 @@ public IList<RequestMiddlewareConfiguration> Pipeline
9793
public IList<Action<IList<RequestMiddlewareConfiguration>>> PipelineModifiers
9894
=> _pipelineModifiers;
9995

96+
public IList<Action<SchemaOptions>> SchemaOptionModifiers
97+
=> _schemaOptionModifiers;
98+
10099
/// <summary>
101100
/// Gets or sets the default pipeline factory.
102101
/// </summary>
@@ -111,7 +110,6 @@ public IList<Action<IList<RequestMiddlewareConfiguration>>> PipelineModifiers
111110
public void CopyTo(RequestExecutorSetup options)
112111
{
113112
options.Schema = Schema;
114-
options.SchemaBuilder = SchemaBuilder;
115113
options.RequestExecutorOptions = RequestExecutorOptions;
116114
options._onConfigureSchemaBuilderHooks.AddRange(_onConfigureSchemaBuilderHooks);
117115
options._onConfigureRequestExecutorOptionsHooks.AddRange(_onConfigureRequestExecutorOptionsHooks);
@@ -121,6 +119,7 @@ public void CopyTo(RequestExecutorSetup options)
121119
options._onRequestExecutorEvictedHooks.AddRange(_onRequestExecutorEvictedHooks);
122120
options._onBuildDocumentValidatorHooks.AddRange(_onBuildDocumentValidatorHooks);
123121
options._pipelineModifiers.AddRange(_pipelineModifiers);
122+
options._schemaOptionModifiers.AddRange(_schemaOptionModifiers);
124123
options._typeModules.AddRange(_typeModules);
125124
options.EvictionTimeout = EvictionTimeout;
126125

src/HotChocolate/Core/src/Execution/DependencyInjection/SchemaRequestExecutorBuilderExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public static IRequestExecutorBuilder ModifyOptions(
2828
ArgumentNullException.ThrowIfNull(builder);
2929
ArgumentNullException.ThrowIfNull(configure);
3030

31-
return builder.ConfigureSchema(b => b.ModifyOptions(configure));
31+
return builder.Configure(setup => setup.SchemaOptionModifiers.Add(configure));
3232
}
3333

3434
/// <summary>

src/HotChocolate/Core/src/Execution/RequestExecutorManager.cs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,9 +150,12 @@ private async Task<RegisteredExecutor> CreateRequestExecutorAsync(
150150
await _optionsMonitor.GetAsync(schemaName, cancellationToken)
151151
.ConfigureAwait(false);
152152

153+
var options = CreateSchemaOptions(setup);
154+
var schemaBuilder = SchemaBuilder.New(options);
155+
153156
var context = new ConfigurationContext(
154157
schemaName,
155-
setup.SchemaBuilder ?? SchemaBuilder.New(),
158+
schemaBuilder,
156159
_applicationServices);
157160

158161
var typeModuleChangeMonitor = new TypeModuleChangeMonitor(this, context.SchemaName);
@@ -241,6 +244,18 @@ private static async Task RunEvictionEvents(RegisteredExecutor registeredExecuto
241244
}
242245
}
243246

247+
internal static SchemaOptions CreateSchemaOptions(RequestExecutorSetup setup)
248+
{
249+
var options = new SchemaOptions();
250+
251+
foreach (var configure in setup.SchemaOptionModifiers)
252+
{
253+
configure(options);
254+
}
255+
256+
return options;
257+
}
258+
244259
private async Task<ServiceProvider> CreateSchemaServicesAsync(
245260
ConfigurationContext context,
246261
RequestExecutorSetup setup,

src/HotChocolate/Core/src/Types/SchemaBuilder.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,15 @@ public partial class SchemaBuilder : ISchemaBuilder
2222
private readonly List<CreateRef> _types = [];
2323
private readonly Dictionary<OperationType, CreateRef> _operations = [];
2424

25-
private readonly SchemaOptions _options = new();
25+
private readonly SchemaOptions _options;
2626
private IsOfTypeFallback? _isOfType;
2727
private IServiceProvider? _services;
2828
private CreateRef? _schema;
2929

30-
private SchemaBuilder()
30+
private SchemaBuilder(SchemaOptions options)
3131
{
32+
_options = options;
33+
3234
var typeInterceptors = new TypeInterceptorCollection();
3335

3436
typeInterceptors.TryAdd(new IntrospectionTypeInterceptor());
@@ -238,5 +240,7 @@ public ISchemaBuilder AddServices(IServiceProvider services)
238240
/// <returns>
239241
/// Returns a new instance of <see cref="SchemaBuilder"/>.
240242
/// </returns>
241-
public static SchemaBuilder New() => new();
243+
public static SchemaBuilder New() => new(new SchemaOptions());
244+
245+
internal static SchemaBuilder New(SchemaOptions options) => new(options);
242246
}

0 commit comments

Comments
 (0)