diff --git a/src/HotChocolate/Core/src/Execution/DependencyInjection/RequestExecutorBuilderExtensions.IdSerializer.cs b/src/HotChocolate/Core/src/Execution/DependencyInjection/RequestExecutorBuilderExtensions.IdSerializer.cs index 4c1fc4b90af..d865bdecdbf 100644 --- a/src/HotChocolate/Core/src/Execution/DependencyInjection/RequestExecutorBuilderExtensions.IdSerializer.cs +++ b/src/HotChocolate/Core/src/Execution/DependencyInjection/RequestExecutorBuilderExtensions.IdSerializer.cs @@ -38,18 +38,31 @@ public static IRequestExecutorBuilder AddDefaultNodeIdSerializer( { ArgumentNullException.ThrowIfNull(builder); - if (!builder.Services.Any(t => - t.ServiceType == typeof(INodeIdValueSerializer) - && t.ImplementationType == typeof(StringNodeIdValueSerializer))) + if (!builder.Services.IsImplementationTypeRegistered()) { builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); - builder.Services.AddSingleton(new GuidNodeIdValueSerializer(compress: outputNewIdFormat)); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); + builder.Services.AddSingleton(new GuidNodeIdValueSerializer(compress: outputNewIdFormat)); + } + else + { + // if serializers are already registered we need to replace the + // default guid serializer with the new one in order to make sure + // that we have the right settings configured for it. + var serviceRegistration = builder.Services.FirstOrDefault( + t => t.ServiceType == typeof(INodeIdValueSerializer) + && t.ImplementationType == typeof(GuidNodeIdValueSerializer)); + if (serviceRegistration is not null) + { + builder.Services.Remove(serviceRegistration); + builder.Services.AddSingleton( + new GuidNodeIdValueSerializer(compress: outputNewIdFormat)); + } } builder.Services.RemoveService(); @@ -120,9 +133,6 @@ public static IRequestExecutorBuilder AddDefaultNodeIdSerializer( /// /// The request executor builder. /// - /// - /// The maximum allowed length of a node id. - /// /// /// Returns the request executor builder. /// @@ -130,8 +140,7 @@ public static IRequestExecutorBuilder AddDefaultNodeIdSerializer( /// is . /// public static IRequestExecutorBuilder AddLegacyNodeIdSerializer( - this IRequestExecutorBuilder builder, - int maxIdLength = 1024) + this IRequestExecutorBuilder builder) { ArgumentNullException.ThrowIfNull(builder);