Skip to content

Commit 4055925

Browse files
authored
Fix bug: schema instance was registered incorrectly by AddSchema (graphql-dotnet#2801)
1 parent 22f60d7 commit 4055925

File tree

2 files changed

+12
-13
lines changed

2 files changed

+12
-13
lines changed

src/GraphQL.Tests/DI/GraphQLBuilderTests.cs

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -272,18 +272,8 @@ public void AddSchema_Factory()
272272
public void AddSchema_Instance()
273273
{
274274
var schema = new TestSchema();
275-
_builderMock.Setup(b => b.Register(typeof(TestSchema), It.IsAny<Func<IServiceProvider, object>>(), ServiceLifetime.Singleton, false))
276-
.Returns<Type, Func<IServiceProvider, object>, ServiceLifetime, bool>((_, factory, _, _) =>
277-
{
278-
factory(null).ShouldBe(schema);
279-
return _builder;
280-
}).Verifiable();
281-
_builderMock.Setup(b => b.TryRegister(typeof(ISchema), It.IsAny<Func<IServiceProvider, object>>(), ServiceLifetime.Singleton))
282-
.Returns<Type, Func<IServiceProvider, object>, ServiceLifetime>((_, factory, _) =>
283-
{
284-
factory(null).ShouldBe(schema);
285-
return _builder;
286-
}).Verifiable();
275+
_builderMock.Setup(b => b.Register(typeof(TestSchema), schema, false)).Returns(_builder).Verifiable();
276+
_builderMock.Setup(b => b.TryRegister(typeof(ISchema), schema)).Returns(_builder).Verifiable();
287277
_builder.AddSchema(schema);
288278
Verify();
289279
}

src/GraphQL/GraphQLBuilderExtensions.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,16 @@ public static IGraphQLBuilder AddSchema<TSchema>(this IGraphQLBuilder builder, S
174174
/// </summary>
175175
public static IGraphQLBuilder AddSchema<TSchema>(this IGraphQLBuilder builder, TSchema schema)
176176
where TSchema : class, ISchema
177-
=> schema == null ? throw new ArgumentNullException(nameof(schema)) : AddSchema(builder, _ => schema, ServiceLifetime.Singleton);
177+
{
178+
if (schema == null)
179+
throw new ArgumentNullException(nameof(schema));
180+
181+
// Register the service with the DI provider as TSchema, overwriting any existing registration
182+
// Also register the service as ISchema if not already registered.
183+
builder.TryRegisterAsBoth<ISchema, TSchema>(schema);
184+
185+
return builder;
186+
}
178187

179188
/// <inheritdoc cref="AddSchema{TSchema}(IGraphQLBuilder, ServiceLifetime)"/>
180189
public static IGraphQLBuilder AddSchema<TSchema>(this IGraphQLBuilder builder, Func<IServiceProvider, TSchema> schemaFactory, ServiceLifetime serviceLifetime = ServiceLifetime.Singleton)

0 commit comments

Comments
 (0)