diff --git a/src/HotChocolate/Core/src/Types/Internal/ExtendedType.Members.cs b/src/HotChocolate/Core/src/Types/Internal/ExtendedType.Members.cs index b840b452f0b..2cfd24182e9 100644 --- a/src/HotChocolate/Core/src/Types/Internal/ExtendedType.Members.cs +++ b/src/HotChocolate/Core/src/Types/Internal/ExtendedType.Members.cs @@ -28,7 +28,10 @@ private static ExtendedType FromMember(MemberInfo member) }; } - public static ExtendedMethodInfo FromMethod(MethodInfo method, TypeCache cache) + public static ExtendedMethodInfo FromMethod( + MethodInfo method, + ParameterInfo[] parameters, + TypeCache cache) { var helper = new NullableHelper(method.DeclaringType!); var context = helper.GetContext(method); @@ -40,8 +43,8 @@ public static ExtendedMethodInfo FromMethod(MethodInfo method, TypeCache cache) method, cache)); - var parameters = method.GetParameters(); - var parameterTypes = ImmutableDictionary.CreateBuilder(); + var parameterTypes = ImmutableDictionary.CreateBuilder( + ParameterInfoComparer.Instance); foreach (var parameter in parameters) { diff --git a/src/HotChocolate/Core/src/Types/Internal/ExtendedType.cs b/src/HotChocolate/Core/src/Types/Internal/ExtendedType.cs index dc8e0687b98..65791623135 100644 --- a/src/HotChocolate/Core/src/Types/Internal/ExtendedType.cs +++ b/src/HotChocolate/Core/src/Types/Internal/ExtendedType.cs @@ -205,12 +205,16 @@ internal static ExtendedType FromMember(MemberInfo member, TypeCache cache) return Members.FromMember(member, cache); } - internal static ExtendedMethodInfo FromMethod(MethodInfo method, TypeCache cache) + internal static ExtendedMethodInfo FromMethod( + MethodInfo method, + ParameterInfo[] parameters, + TypeCache cache) { ArgumentNullException.ThrowIfNull(method); + ArgumentNullException.ThrowIfNull(parameters); ArgumentNullException.ThrowIfNull(cache); - return Members.FromMethod(method, cache); + return Members.FromMethod(method, parameters, cache); } /// diff --git a/src/HotChocolate/Core/src/Types/Internal/ParameterInfoComparer.cs b/src/HotChocolate/Core/src/Types/Internal/ParameterInfoComparer.cs new file mode 100644 index 00000000000..dc9f75df561 --- /dev/null +++ b/src/HotChocolate/Core/src/Types/Internal/ParameterInfoComparer.cs @@ -0,0 +1,29 @@ +using System.Reflection; + +namespace HotChocolate.Internal; + +internal sealed class ParameterInfoComparer : IEqualityComparer +{ + public bool Equals(ParameterInfo? x, ParameterInfo? y) + { + if (ReferenceEquals(x, y)) + { + return true; + } + + if (x is null || y is null) + { + return false; + } + + return x.MetadataToken == y.MetadataToken + && x.Member.Module.MetadataToken == y.Member.Module.MetadataToken; + } + + public int GetHashCode(ParameterInfo obj) + { + return HashCode.Combine(obj.MetadataToken, obj.Member.Module.MetadataToken); + } + + public static readonly ParameterInfoComparer Instance = new(); +} diff --git a/src/HotChocolate/Core/src/Types/Resolvers/DefaultResolverCompiler.cs b/src/HotChocolate/Core/src/Types/Resolvers/DefaultResolverCompiler.cs index 2dca8a2342f..c661a27188c 100644 --- a/src/HotChocolate/Core/src/Types/Resolvers/DefaultResolverCompiler.cs +++ b/src/HotChocolate/Core/src/Types/Resolvers/DefaultResolverCompiler.cs @@ -30,6 +30,7 @@ internal sealed class DefaultResolverCompiler : IResolverCompiler private static readonly MethodInfo s_resolver = typeof(IResolverContext).GetMethod(nameof(IResolverContext.Resolver))!; + private readonly ITypeInspector _typeInspector; private readonly Dictionary _cache = []; private readonly List _parameterExpressionBuilders; private readonly List _defaultParameterExpressionBuilders; @@ -40,9 +41,12 @@ internal sealed class DefaultResolverCompiler : IResolverCompiler new Dictionary(); public DefaultResolverCompiler( + ITypeInspector typeInspector, IServiceProvider schemaServiceProvider, IEnumerable? customParameterExpressionBuilders) { + _typeInspector = typeInspector; + var appServiceProvider = schemaServiceProvider.GetService()?.ServiceProvider; var serviceInspector = appServiceProvider?.GetService(); @@ -251,9 +255,10 @@ public SubscribeResolverDelegate CompileSubscribe( { if (method.IsStatic) { + var parameters = _typeInspector.GetParameters(method); var parameterExpr = CreateParameters( s_context, - method.GetParameters(), + parameters, argumentNames, parameterExpressionBuilders); Expression subscribeResolver = Call(method, parameterExpr); @@ -262,7 +267,7 @@ public SubscribeResolverDelegate CompileSubscribe( } else { - var parameters = method.GetParameters(); + var parameters = _typeInspector.GetParameters(method); var owner = CreateResolverOwner(s_context, sourceType, resolverType); var parameterExpr = CreateParameters( s_context, @@ -326,12 +331,13 @@ private FieldResolverDelegate CompileStaticResolver( IReadOnlyDictionary argumentNames, IReadOnlyList fieldParameterExpressionBuilders) { - var parameters = CreateParameters( + var parameters = _typeInspector.GetParameters(method); + var parameterExpr = CreateParameters( s_context, - method.GetParameters(), + parameters, argumentNames, fieldParameterExpressionBuilders); - Expression resolver = Call(method, parameters); + Expression resolver = Call(method, parameterExpr); resolver = EnsureResolveResult(resolver, method.ReturnType); return Lambda(resolver, s_context).Compile(); } @@ -353,7 +359,7 @@ private FieldResolverDelegate CreateResolver( if (member is MethodInfo method) { - var parameters = method.GetParameters(); + var parameters = _typeInspector.GetParameters(method); var owner = CreateResolverOwner(s_context, source, resolverType); var parameterExpr = CreateParameters( s_context, @@ -391,7 +397,7 @@ private FieldResolverDelegate CreateResolver( if (member is MethodInfo method) { - var parameters = method.GetParameters(); + var parameters = _typeInspector.GetParameters(method); if (IsPureResolver(method, parameters, fieldParameterExpressionBuilders)) { diff --git a/src/HotChocolate/Core/src/Types/Types/Attributes/SubscribeAttribute.cs b/src/HotChocolate/Core/src/Types/Types/Attributes/SubscribeAttribute.cs index be6a4eabd47..d8a00b4bc47 100644 --- a/src/HotChocolate/Core/src/Types/Types/Attributes/SubscribeAttribute.cs +++ b/src/HotChocolate/Core/src/Types/Types/Attributes/SubscribeAttribute.cs @@ -35,7 +35,7 @@ protected override void OnConfigure( if (MessageType is null) { var messageParameter = - method.GetParameters() + context.TypeInspector.GetParameters(method) .FirstOrDefault(t => t.IsDefined(typeof(EventMessageAttribute))); if (messageParameter is null) diff --git a/src/HotChocolate/Core/src/Types/Types/Descriptors/Conventions/DefaultTypeInspector.cs b/src/HotChocolate/Core/src/Types/Types/Descriptors/Conventions/DefaultTypeInspector.cs index b0ac7578387..04ef9b2f9b9 100644 --- a/src/HotChocolate/Core/src/Types/Types/Descriptors/Conventions/DefaultTypeInspector.cs +++ b/src/HotChocolate/Core/src/Types/Types/Descriptors/Conventions/DefaultTypeInspector.cs @@ -27,9 +27,15 @@ public class DefaultTypeInspector(bool ignoreRequiredAttribute = false) : Conven private const string EqualsMethodName = "Equals"; private const string CloneMethodName = "$"; +#if NET9_0_OR_GREATER + private readonly Lock _parametersLock = new(); +#else + private readonly object _parametersLock = new(); +#endif private readonly TypeCache _typeCache = new(); private readonly ConcurrentDictionary _methods = []; - private readonly ConcurrentDictionary<(Type, bool, bool), MemberInfo[]> _memberCache = new(); + private readonly ConcurrentDictionary<(Type, bool, bool), MemberInfo[]> _membersCache = new(); + private readonly ConcurrentDictionary _parametersCache = new(); /// /// Infer type to be non-null if is found. @@ -47,7 +53,7 @@ public ReadOnlySpan GetMembers( var cacheKey = (type, includeIgnored, includeStatic); - if (_memberCache.TryGetValue(cacheKey, out var cached)) + if (_membersCache.TryGetValue(cacheKey, out var cached)) { return cached; } @@ -71,12 +77,35 @@ public ReadOnlySpan GetMembers( var selectedMembers = new MemberInfo[next]; span.CopyTo(selectedMembers); span.Clear(); - _memberCache.TryAdd(cacheKey, selectedMembers); + _membersCache.TryAdd(cacheKey, selectedMembers); ArrayPool.Shared.Return(temp); return selectedMembers; } + /// + public ParameterInfo[] GetParameters(MethodInfo method) + { + // ReSharper disable once InconsistentlySynchronizedField + if (_parametersCache.TryGetValue(method, out var parameters)) + { + return parameters; + } + + lock (_parametersLock) + { + if (_parametersCache.TryGetValue(method, out parameters)) + { + return parameters; + } + + parameters = method.GetParameters(); + _parametersCache.TryAdd(method, parameters); + + return parameters; + } + } + /// public virtual bool IsMemberIgnored(MemberInfo member) { @@ -164,7 +193,11 @@ private IExtendedType GetArgumentTypeInternal(ParameterInfo parameter) var info = _methods.GetOrAdd( method, - static (m, c) => ExtendedType.FromMethod(m, c), _typeCache); + static (methodInfo, typeInspector) => + { + var parameters = typeInspector.GetParameters(methodInfo); + return ExtendedType.FromMethod(methodInfo, parameters, typeInspector._typeCache); + }, this); return info.ParameterTypes[parameter]; } @@ -667,7 +700,8 @@ private bool CanBeHandled( if (member is MethodInfo { IsGenericMethodDefinition: false } method && CanHandleReturnType(member, method.ReturnType, allowObjectType)) { - foreach (var parameter in method.GetParameters()) + var parameters = GetParameters(method); + foreach (var parameter in parameters) { if (!CanHandleParameter(parameter, allowObjectType)) { diff --git a/src/HotChocolate/Core/src/Types/Types/Descriptors/Conventions/DescriptorContext.cs b/src/HotChocolate/Core/src/Types/Types/Descriptors/Conventions/DescriptorContext.cs index 469fd8b58d3..3e58ed2faab 100644 --- a/src/HotChocolate/Core/src/Types/Types/Descriptors/Conventions/DescriptorContext.cs +++ b/src/HotChocolate/Core/src/Types/Types/Descriptors/Conventions/DescriptorContext.cs @@ -26,8 +26,6 @@ public sealed partial class DescriptorContext : IDescriptorContext private readonly Func _options; private FeatureReference _typeSystemFeature = FeatureReference.Default; private TypeDiscoveryHandler[]? _typeDiscoveryHandlers; - private INamingConventions? _naming; - private ITypeInspector? _inspector; private DescriptorContext( Func options, @@ -42,13 +40,16 @@ private DescriptorContext( _serviceHelper = new ServiceHelper(Services); Features = features; TypeInterceptor = typeInterceptor; - ResolverCompiler = new DefaultResolverCompiler( - schemaServices, - _serviceHelper.GetParameterExpressionBuilders()); TypeConverter = _serviceHelper.GetTypeConverter(); InputFormatter = _serviceHelper.GetInputFormatter(TypeConverter); InputParser = _serviceHelper.GetInputParser(TypeConverter); + + TypeInspector = this.GetConventionOrDefault(new DefaultTypeInspector()); + ResolverCompiler = new DefaultResolverCompiler( + TypeInspector, + schemaServices, + _serviceHelper.GetParameterExpressionBuilders()); } internal SchemaBuilder.LazySchema Schema { get; } @@ -60,11 +61,12 @@ private DescriptorContext( public IReadOnlySchemaOptions Options => _options(); /// + [field: AllowNull, MaybeNull] public INamingConventions Naming { get { - _naming ??= GetConventionOrDefault(() => Options.UseXmlDocumentation + field ??= GetConventionOrDefault(() => Options.UseXmlDocumentation ? new DefaultNamingConventions( new XmlDocumentationProvider( new XmlDocumentationFileResolver( @@ -73,21 +75,12 @@ public INamingConventions Naming : new DefaultNamingConventions( new NoopDocumentationProvider())); - return _naming; + return field; } } /// - public ITypeInspector TypeInspector - { - get - { - _inspector ??= this.GetConventionOrDefault( - new DefaultTypeInspector()); - - return _inspector; - } - } + public ITypeInspector TypeInspector { get; } /// public TypeInterceptor TypeInterceptor { get; } diff --git a/src/HotChocolate/Core/src/Types/Types/Descriptors/Conventions/ITypeInspector.cs b/src/HotChocolate/Core/src/Types/Types/Descriptors/Conventions/ITypeInspector.cs index c5800b642b9..a517b29c936 100644 --- a/src/HotChocolate/Core/src/Types/Types/Descriptors/Conventions/ITypeInspector.cs +++ b/src/HotChocolate/Core/src/Types/Types/Descriptors/Conventions/ITypeInspector.cs @@ -34,6 +34,17 @@ ReadOnlySpan GetMembers( bool includeStatic = false, bool allowObject = false); + /// + /// Gets the parameters of in a thread-safe manner. + /// + /// + /// The method to get the parameters from. + /// + /// + /// The parameters of the . + /// + ParameterInfo[] GetParameters(MethodInfo method); + /// /// Defines if a member shall be ignored. This method interprets ignore attributes. /// diff --git a/src/HotChocolate/Core/src/Types/Types/Descriptors/InterfaceFieldDescriptor.cs b/src/HotChocolate/Core/src/Types/Types/Descriptors/InterfaceFieldDescriptor.cs index 85989b0b5ec..9c2c729cc01 100644 --- a/src/HotChocolate/Core/src/Types/Types/Descriptors/InterfaceFieldDescriptor.cs +++ b/src/HotChocolate/Core/src/Types/Types/Descriptors/InterfaceFieldDescriptor.cs @@ -52,7 +52,7 @@ protected internal InterfaceFieldDescriptor( if (member is MethodInfo m) { - _parameterInfos = m.GetParameters(); + _parameterInfos = context.TypeInspector.GetParameters(m); Parameters = _parameterInfos.ToDictionary(t => t.Name!, StringComparer.Ordinal); } } @@ -241,7 +241,7 @@ private IInterfaceFieldDescriptor ResolveWithInternal( if (propertyOrMethod is MethodInfo m) { - _parameterInfos = m.GetParameters(); + _parameterInfos = Context.TypeInspector.GetParameters(m); Parameters = _parameterInfos.ToDictionary(t => t.Name!, StringComparer.Ordinal); } diff --git a/src/HotChocolate/Core/src/Types/Types/Descriptors/ObjectFieldDescriptor.cs b/src/HotChocolate/Core/src/Types/Types/Descriptors/ObjectFieldDescriptor.cs index 15f8bee39cf..0bdcdd2a8b9 100644 --- a/src/HotChocolate/Core/src/Types/Types/Descriptors/ObjectFieldDescriptor.cs +++ b/src/HotChocolate/Core/src/Types/Types/Descriptors/ObjectFieldDescriptor.cs @@ -62,7 +62,7 @@ protected ObjectFieldDescriptor( if (member is MethodInfo m) { - _parameterInfos = m.GetParameters(); + _parameterInfos = context.TypeInspector.GetParameters(m); Parameters = _parameterInfos.ToDictionary(t => t.Name!, StringComparer.Ordinal); Configuration.ResultType = m.ReturnType; } @@ -172,7 +172,7 @@ private void CompleteArguments(ObjectFieldConfiguration definition) if (subscribeMember is MethodInfo subscribeMethod) { - var subscribeParameters = subscribeMethod.GetParameters(); + var subscribeParameters = Context.TypeInspector.GetParameters(subscribeMethod); var parameterLength = _parameterInfos.Length + subscribeParameters.Length; var parameters = new ParameterInfo[parameterLength]; @@ -397,7 +397,7 @@ private IObjectFieldDescriptor ResolveWithInternal( if (propertyOrMethod is MethodInfo m) { - _parameterInfos = m.GetParameters(); + _parameterInfos = Context.TypeInspector.GetParameters(m); Parameters = _parameterInfos.ToDictionary(t => t.Name!, StringComparer.Ordinal); } diff --git a/src/HotChocolate/Core/src/Types/Types/Interceptors/ResolverTypeInterceptor.cs b/src/HotChocolate/Core/src/Types/Types/Interceptors/ResolverTypeInterceptor.cs index 1eb08024950..b5435f7c111 100644 --- a/src/HotChocolate/Core/src/Types/Types/Interceptors/ResolverTypeInterceptor.cs +++ b/src/HotChocolate/Core/src/Types/Types/Interceptors/ResolverTypeInterceptor.cs @@ -401,7 +401,8 @@ private void TryBindArgumentRuntimeType( { if (member is MethodInfo method) { - foreach (var parameter in _resolverCompiler.GetArgumentParameters(method.GetParameters())) + var parameters = _context.TypeInspector.GetParameters(method); + foreach (var parameter in _resolverCompiler.GetArgumentParameters(parameters)) { _parameters[parameter.Name!] = parameter; } diff --git a/src/HotChocolate/Core/test/Types.Tests/Resolvers/ResolverCompilerTests.cs b/src/HotChocolate/Core/test/Types.Tests/Resolvers/ResolverCompilerTests.cs index 4a240b4d3e9..9c48ecfda2d 100644 --- a/src/HotChocolate/Core/test/Types.Tests/Resolvers/ResolverCompilerTests.cs +++ b/src/HotChocolate/Core/test/Types.Tests/Resolvers/ResolverCompilerTests.cs @@ -22,11 +22,12 @@ public class ResolverCompilerTests public async Task Compile_TaskObjMethod_NoParams_SourceResolver() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.ObjectTaskResolver))!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -40,11 +41,12 @@ public async Task Compile_TaskObjMethod_NoParams_SourceResolver() public async Task Compile_TaskStringMethod_NoParams_SourceResolver() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.StringTaskResolver))!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -58,11 +60,12 @@ public async Task Compile_TaskStringMethod_NoParams_SourceResolver() public async Task Compile_TaskStringMethod_WithParams_SourceResolver() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.StringTaskResolverWithArg))!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -77,11 +80,12 @@ public async Task Compile_TaskStringMethod_WithParams_SourceResolver() public async Task Compile_ObjMethod_NoParams_SourceResolver() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.ObjectResolver))!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -95,11 +99,12 @@ public async Task Compile_ObjMethod_NoParams_SourceResolver() public async Task Compile_StringMethod_NoParams_SourceResolver() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.StringResolver))!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -113,11 +118,12 @@ public async Task Compile_StringMethod_NoParams_SourceResolver() public async Task Compile_StringMethod_WithParams_SourceResolver() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.StringResolverWithArg))!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -132,11 +138,12 @@ public async Task Compile_StringMethod_WithParams_SourceResolver() public async Task Compile_StringValueNodeMethod_WithParams_SourceResolver() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.StringValueNodeResolverWithArg))!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -152,11 +159,12 @@ public async Task Compile_StringValueNodeMethod_WithParams_SourceResolver() public async Task Compile_OptionalStringMethod_WithParams_SourceResolver() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.OptionalStringResolverWithArg))!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -172,11 +180,12 @@ public async Task Compile_OptionalStringMethod_WithParams_SourceResolver() public async Task Compile_ObjTaskProperty_SourceResolver() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetProperty("ObjectTaskStringProp")!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -190,11 +199,12 @@ public async Task Compile_ObjTaskProperty_SourceResolver() public async Task Compile_StringTaskProperty_SourceResolver() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetProperty("StringTaskResolverProp")!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -208,11 +218,12 @@ public async Task Compile_StringTaskProperty_SourceResolver() public async Task Compile_StringProperty_SourceResolver() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetProperty("StringProp")!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -226,11 +237,12 @@ public async Task Compile_StringProperty_SourceResolver() public async Task Compile_TaskObjMethod_NoParams_Resolver() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.ObjectTaskResolver))!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, typeof(Entity), type).Resolver!; @@ -245,11 +257,12 @@ public async Task Compile_TaskObjMethod_NoParams_Resolver() public async Task Compile_TaskStringMethod_NoParams_Resolver() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.StringTaskResolver))!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, typeof(Entity), type).Resolver!; @@ -264,11 +277,12 @@ public async Task Compile_TaskStringMethod_NoParams_Resolver() public async Task Compile_TaskStringMethod_WithParams_Resolver() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.StringTaskResolverWithArg))!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, typeof(Entity), type).Resolver!; @@ -284,11 +298,12 @@ public async Task Compile_TaskStringMethod_WithParams_Resolver() public async Task Compile_ObjMethod_NoParams_Resolver() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.ObjectResolver))!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, typeof(Entity), type).Resolver!; @@ -303,11 +318,12 @@ public async Task Compile_ObjMethod_NoParams_Resolver() public async Task Compile_StringMethod_NoParams_Resolver() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.StringResolver))!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, typeof(Entity), type).Resolver!; @@ -322,11 +338,12 @@ public async Task Compile_StringMethod_NoParams_Resolver() public async Task Compile_StringMethod_WithParams_Resolver() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.StringResolverWithArg))!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, typeof(Entity), type).Resolver!; @@ -342,11 +359,12 @@ public async Task Compile_StringMethod_WithParams_Resolver() public async Task Compile_ObjTaskProperty_Resolver() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetProperty("ObjectTaskStringProp")!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, typeof(Entity), type).Resolver!; @@ -361,11 +379,12 @@ public async Task Compile_ObjTaskProperty_Resolver() public async Task Compile_StringTaskProperty_Resolver() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetProperty("StringTaskResolverProp")!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, typeof(Entity), type).Resolver!; @@ -380,11 +399,12 @@ public async Task Compile_StringTaskProperty_Resolver() public async Task Compile_StringProperty_Resolver() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetProperty("StringProp")!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, typeof(Entity), type).Resolver!; @@ -399,11 +419,12 @@ public async Task Compile_StringProperty_Resolver() public async Task Compile_Arguments_CancellationToken() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.ResolverWithCancellationToken))!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -418,11 +439,12 @@ public async Task Compile_Arguments_CancellationToken() public async Task Compile_Arguments_ResolverContext() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.ResolverWithResolverContext))!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -436,11 +458,12 @@ public async Task Compile_Arguments_ResolverContext() public async Task Compile_Arguments_FieldSelection() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.ResolverWithFieldSelection))!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -458,11 +481,12 @@ public async Task Compile_Arguments_FieldSelection() public async Task Compile_Arguments_Selection() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.ResolverWithSelection))!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; var pure = compiler.CompileResolve(member, type).PureResolver!; @@ -484,11 +508,12 @@ public async Task Compile_Arguments_Selection() public async Task Compile_Arguments_FieldSyntax() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.ResolverWithFieldSyntax))!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; var pure = compiler.CompileResolve(member, type).PureResolver!; @@ -519,11 +544,12 @@ public async Task Compile_Arguments_FieldSyntax() public async Task Compile_Arguments_ObjectType() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.ResolverWithObjectType))!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -544,11 +570,12 @@ public async Task Compile_Arguments_ObjectType() public async Task Compile_Arguments_Operation() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.ResolverWithOperationDefinition))!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -578,11 +605,12 @@ public async Task Compile_Arguments_Operation() public async Task Compile_Arguments_ObjectField() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.ResolverWithObjectField))!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -608,11 +636,12 @@ public async Task Compile_Arguments_ObjectField() public async Task Compile_Arguments_IOutputField() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.ResolverWithOutputField))!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -638,11 +667,12 @@ public async Task Compile_Arguments_IOutputField() public async Task Compile_Arguments_Document() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.ResolverWithDocument))!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -661,11 +691,12 @@ public async Task Compile_Arguments_Document() public async Task Compile_Arguments_Schema() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.ResolverWithSchema))!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -685,11 +716,12 @@ public async Task Compile_Arguments_Schema() public async Task Compile_Arguments_Service() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.ResolverWithService))!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -706,12 +738,13 @@ public async Task Compile_Arguments_Service() public async Task Compile_GetGlobalState_With_Key() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.GetGlobalStateWithKey))!; var contextData = new Dictionary { { "foo", "bar" } }; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -726,12 +759,13 @@ public async Task Compile_GetGlobalState_With_Key() public async Task Compile_GetGlobalState() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.GetGlobalState))!; var contextData = new Dictionary { { "foo", "bar" } }; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -746,12 +780,13 @@ public async Task Compile_GetGlobalState() public async Task Compile_GetGlobalState_State_Does_Not_Exist() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.GetGlobalState))!; var contextData = new Dictionary(); // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -766,12 +801,13 @@ await Assert.ThrowsAsync( public async Task Compile_GetGlobalState_With_Default_Abc() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.GetGlobalStateWithDefaultAbc))!; var contextData = new Dictionary(); // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -786,12 +822,13 @@ public async Task Compile_GetGlobalState_With_Default_Abc() public async Task Compile_GetGlobalState_With_Default() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.GetGlobalStateWithDefault))!; var contextData = new Dictionary(); // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -806,12 +843,13 @@ public async Task Compile_GetGlobalState_With_Default() public async Task Compile_GetGlobalState_Nullable() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.GetGlobalStateNullable))!; var contextData = new Dictionary(); // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -826,12 +864,13 @@ public async Task Compile_GetGlobalState_Nullable() public async Task Compile_SetGlobalState() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.SetGlobalState))!; var contextData = new Dictionary(); // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -848,13 +887,14 @@ public async Task Compile_SetGlobalState() public async Task Compile_SetGlobalState_Generic() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.SetGlobalStateGeneric))!; var contextData = new Dictionary(); // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -871,13 +911,14 @@ public async Task Compile_SetGlobalState_Generic() public async Task Compile_GetScopedState_With_Key() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.GetScopedStateWithKey))!; var contextData = new Dictionary { { "foo", "bar" } } .ToImmutableDictionary(); // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -892,6 +933,7 @@ public async Task Compile_GetScopedState_With_Key() public async Task Compile_GetScopedState() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.GetScopedState))!; @@ -899,7 +941,7 @@ public async Task Compile_GetScopedState() .ToImmutableDictionary(); // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -914,13 +956,14 @@ public async Task Compile_GetScopedState() public async Task Compile_GetScopedState_State_Does_Not_Exist() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.GetScopedState))!; var contextData = ImmutableDictionary.Empty; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -935,6 +978,7 @@ await Assert.ThrowsAsync( public async Task Compile_GetScopedState_With_Default_Abc() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.GetScopedStateWithDefaultAbc))!; @@ -942,7 +986,7 @@ public async Task Compile_GetScopedState_With_Default_Abc() ImmutableDictionary.Empty; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -957,6 +1001,7 @@ public async Task Compile_GetScopedState_With_Default_Abc() public async Task Compile_GetScopedState_With_Default() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.GetScopedStateWithDefault))!; @@ -964,7 +1009,7 @@ public async Task Compile_GetScopedState_With_Default() ImmutableDictionary.Empty; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -979,6 +1024,7 @@ public async Task Compile_GetScopedState_With_Default() public async Task Compile_GetScopedState_Nullable() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.GetScopedStateNullable))!; @@ -986,7 +1032,7 @@ public async Task Compile_GetScopedState_Nullable() ImmutableDictionary.Empty; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -1001,6 +1047,7 @@ public async Task Compile_GetScopedState_Nullable() public async Task Compile_SetScopedState() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.SetScopedState))!; @@ -1008,7 +1055,7 @@ public async Task Compile_SetScopedState() ImmutableDictionary.Empty; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -1027,6 +1074,7 @@ public async Task Compile_SetScopedState() public async Task Compile_SetScopedState_Generic() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.SetScopedStateGeneric))!; @@ -1034,7 +1082,7 @@ public async Task Compile_SetScopedState_Generic() ImmutableDictionary.Empty; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -1053,13 +1101,14 @@ public async Task Compile_SetScopedState_Generic() public async Task Compile_GetLocalState_With_Key() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.GetLocalStateWithKey))!; var contextData = new Dictionary { { "foo", "bar" } } .ToImmutableDictionary(); // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -1074,13 +1123,14 @@ public async Task Compile_GetLocalState_With_Key() public async Task Compile_GetLocalState() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.GetLocalState))!; var contextData = new Dictionary { { "foo", "bar" } } .ToImmutableDictionary(); // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -1095,13 +1145,14 @@ public async Task Compile_GetLocalState() public async Task Compile_GetLocalState_State_Does_Not_Exist() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.GetLocalState))!; var contextData = ImmutableDictionary.Empty; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -1116,13 +1167,14 @@ await Assert.ThrowsAsync( public async Task Compile_GetLocalState_With_Default_Abc() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.GetLocalStateWithDefaultAbc))!; var contextData = ImmutableDictionary.Empty; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -1137,13 +1189,14 @@ public async Task Compile_GetLocalState_With_Default_Abc() public async Task Compile_GetLocalState_With_Default() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.GetLocalStateWithDefault))!; var contextData = ImmutableDictionary.Empty; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -1158,6 +1211,7 @@ public async Task Compile_GetLocalState_With_Default() public async Task Compile_SetLocalState() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.SetLocalState))!; @@ -1165,7 +1219,7 @@ public async Task Compile_SetLocalState() ImmutableDictionary.Empty; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -1184,6 +1238,7 @@ public async Task Compile_SetLocalState() public async Task Compile_SetLocalState_Generic() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.SetLocalStateGeneric))!; @@ -1191,7 +1246,7 @@ public async Task Compile_SetLocalState_Generic() ImmutableDictionary.Empty; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -1210,6 +1265,7 @@ public async Task Compile_SetLocalState_Generic() public async Task Compile_GetClaimsPrincipal() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.GetClaimsPrincipal))!; @@ -1219,7 +1275,7 @@ public async Task Compile_GetClaimsPrincipal() }; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -1234,13 +1290,14 @@ public async Task Compile_GetClaimsPrincipal() public async Task Compile_GetClaimsPrincipal_ClaimsNotExists() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.GetClaimsPrincipal))!; var contextData = new Dictionary(); // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -1256,13 +1313,14 @@ public async Task Compile_GetClaimsPrincipal_ClaimsNotExists() public async Task Compile_GetNullableClaimsPrincipal_ClaimsNotExists() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.GetNullableClaimsPrincipal))!; var contextData = new Dictionary(); // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert @@ -1278,11 +1336,12 @@ public async Task Compile_GetNullableClaimsPrincipal_ClaimsNotExists() public async Task Compile_Arguments_Path() { // arrange + var typeInspector = new DefaultTypeInspector(); var type = typeof(Resolvers); MemberInfo member = type.GetMethod(nameof(Resolvers.GetPath))!; // act - var compiler = new DefaultResolverCompiler(EmptyServiceProvider.Instance, _empty); + var compiler = new DefaultResolverCompiler(typeInspector, EmptyServiceProvider.Instance, _empty); var resolver = compiler.CompileResolve(member, type).Resolver!; // assert diff --git a/src/HotChocolate/Data/test/Data.Filters.Tests/__snapshots__/FilterInputTypeTest.FilterInputType_Should_ThrowException_WhenNoConventionIsRegistered.snap b/src/HotChocolate/Data/test/Data.Filters.Tests/__snapshots__/FilterInputTypeTest.FilterInputType_Should_ThrowException_WhenNoConventionIsRegistered.snap index b18038f25f2..89a3e4ac856 100644 --- a/src/HotChocolate/Data/test/Data.Filters.Tests/__snapshots__/FilterInputTypeTest.FilterInputType_Should_ThrowException_WhenNoConventionIsRegistered.snap +++ b/src/HotChocolate/Data/test/Data.Filters.Tests/__snapshots__/FilterInputTypeTest.FilterInputType_Should_ThrowException_WhenNoConventionIsRegistered.snap @@ -6,7 +6,7 @@ For more details look at the `Errors` property. (HotChocolate.Types.ObjectType) at HotChocolate.Data.FilterDescriptorContextExtensions.<>c__DisplayClass1_0.b__0() in FilterDescriptorContextExtensions.cs:line 19 - at HotChocolate.Types.Descriptors.DescriptorContext.GetConventionOrDefault[T](Func`1 factory, String scope) in DescriptorContext.cs:line 165 + at HotChocolate.Types.Descriptors.DescriptorContext.GetConventionOrDefault[T](Func`1 factory, String scope) in DescriptorContext.cs:line 158 at HotChocolate.Data.FilterDescriptorContextExtensions.GetFilterConvention(IDescriptorContext context, String scope) in FilterDescriptorContextExtensions.cs:line 18 at HotChocolate.Types.FilterObjectFieldDescriptorExtensions.<>c__DisplayClass5_0.b__1(IDescriptorContext c, ObjectFieldConfiguration definition) in FilterObjectFieldDescriptorExtensions.cs:line 128 at HotChocolate.Types.Descriptors.DescriptorBase`1.<>c__DisplayClass21_0.b__0(IDescriptorContext c, ITypeSystemConfiguration d) in DescriptorBase~1.cs:line 97 diff --git a/src/HotChocolate/Data/test/Data.Filters.Tests/__snapshots__/FilterInputTypeTest.FilterInputType_Should_ThrowException_WhenNoConventionIsRegisteredDefault.snap b/src/HotChocolate/Data/test/Data.Filters.Tests/__snapshots__/FilterInputTypeTest.FilterInputType_Should_ThrowException_WhenNoConventionIsRegisteredDefault.snap index f280d6414cd..81834e58a84 100644 --- a/src/HotChocolate/Data/test/Data.Filters.Tests/__snapshots__/FilterInputTypeTest.FilterInputType_Should_ThrowException_WhenNoConventionIsRegisteredDefault.snap +++ b/src/HotChocolate/Data/test/Data.Filters.Tests/__snapshots__/FilterInputTypeTest.FilterInputType_Should_ThrowException_WhenNoConventionIsRegisteredDefault.snap @@ -6,7 +6,7 @@ For more details look at the `Errors` property. (HotChocolate.Types.ObjectType) at HotChocolate.Data.FilterDescriptorContextExtensions.<>c__DisplayClass1_0.b__0() in FilterDescriptorContextExtensions.cs:line 19 - at HotChocolate.Types.Descriptors.DescriptorContext.GetConventionOrDefault[T](Func`1 factory, String scope) in DescriptorContext.cs:line 165 + at HotChocolate.Types.Descriptors.DescriptorContext.GetConventionOrDefault[T](Func`1 factory, String scope) in DescriptorContext.cs:line 158 at HotChocolate.Data.FilterDescriptorContextExtensions.GetFilterConvention(IDescriptorContext context, String scope) in FilterDescriptorContextExtensions.cs:line 18 at HotChocolate.Types.FilterObjectFieldDescriptorExtensions.<>c__DisplayClass5_0.b__1(IDescriptorContext c, ObjectFieldConfiguration definition) in FilterObjectFieldDescriptorExtensions.cs:line 128 at HotChocolate.Types.Descriptors.DescriptorBase`1.<>c__DisplayClass21_0.b__0(IDescriptorContext c, ITypeSystemConfiguration d) in DescriptorBase~1.cs:line 97 diff --git a/src/HotChocolate/Data/test/Data.Sorting.Tests/__snapshots__/SortInputTypeTests.SortInputType_Should_ThrowException_WhenNoConventionIsRegistered.snap b/src/HotChocolate/Data/test/Data.Sorting.Tests/__snapshots__/SortInputTypeTests.SortInputType_Should_ThrowException_WhenNoConventionIsRegistered.snap index 12fa1bf9c8e..8991f5ee2a7 100644 --- a/src/HotChocolate/Data/test/Data.Sorting.Tests/__snapshots__/SortInputTypeTests.SortInputType_Should_ThrowException_WhenNoConventionIsRegistered.snap +++ b/src/HotChocolate/Data/test/Data.Sorting.Tests/__snapshots__/SortInputTypeTests.SortInputType_Should_ThrowException_WhenNoConventionIsRegistered.snap @@ -6,7 +6,7 @@ For more details look at the `Errors` property. (HotChocolate.Types.ObjectType) at HotChocolate.Data.SortDescriptorContextExtensions.<>c__DisplayClass1_0.b__0() in SortDescriptorContextExtensions.cs:line 20 - at HotChocolate.Types.Descriptors.DescriptorContext.GetConventionOrDefault[T](Func`1 factory, String scope) in DescriptorContext.cs:line 165 + at HotChocolate.Types.Descriptors.DescriptorContext.GetConventionOrDefault[T](Func`1 factory, String scope) in DescriptorContext.cs:line 158 at HotChocolate.Data.SortDescriptorContextExtensions.GetSortConvention(IDescriptorContext context, String scope) in SortDescriptorContextExtensions.cs:line 19 at HotChocolate.Types.SortingObjectFieldDescriptorExtensions.<>c__DisplayClass5_0.b__1(IDescriptorContext c, ObjectFieldConfiguration definition) in SortingObjectFieldDescriptorExtensions.cs:line 130 at HotChocolate.Types.Descriptors.DescriptorBase`1.<>c__DisplayClass21_0.b__0(IDescriptorContext c, ITypeSystemConfiguration d) in DescriptorBase~1.cs:line 97 diff --git a/src/HotChocolate/Data/test/Data.Sorting.Tests/__snapshots__/SortInputTypeTests.SortInputType_Should_ThrowException_WhenNoConventionIsRegisteredDefault.snap b/src/HotChocolate/Data/test/Data.Sorting.Tests/__snapshots__/SortInputTypeTests.SortInputType_Should_ThrowException_WhenNoConventionIsRegisteredDefault.snap index 39efb6cfdce..5ca31c40e3b 100644 --- a/src/HotChocolate/Data/test/Data.Sorting.Tests/__snapshots__/SortInputTypeTests.SortInputType_Should_ThrowException_WhenNoConventionIsRegisteredDefault.snap +++ b/src/HotChocolate/Data/test/Data.Sorting.Tests/__snapshots__/SortInputTypeTests.SortInputType_Should_ThrowException_WhenNoConventionIsRegisteredDefault.snap @@ -6,7 +6,7 @@ For more details look at the `Errors` property. (HotChocolate.Types.ObjectType) at HotChocolate.Data.SortDescriptorContextExtensions.<>c__DisplayClass1_0.b__0() in SortDescriptorContextExtensions.cs:line 20 - at HotChocolate.Types.Descriptors.DescriptorContext.GetConventionOrDefault[T](Func`1 factory, String scope) in DescriptorContext.cs:line 165 + at HotChocolate.Types.Descriptors.DescriptorContext.GetConventionOrDefault[T](Func`1 factory, String scope) in DescriptorContext.cs:line 158 at HotChocolate.Data.SortDescriptorContextExtensions.GetSortConvention(IDescriptorContext context, String scope) in SortDescriptorContextExtensions.cs:line 19 at HotChocolate.Types.SortingObjectFieldDescriptorExtensions.<>c__DisplayClass5_0.b__1(IDescriptorContext c, ObjectFieldConfiguration definition) in SortingObjectFieldDescriptorExtensions.cs:line 130 at HotChocolate.Types.Descriptors.DescriptorBase`1.<>c__DisplayClass21_0.b__0(IDescriptorContext c, ITypeSystemConfiguration d) in DescriptorBase~1.cs:line 97