private void CompleteCollectionBindings(ITypeRegistry typeRegistry) { foreach (ResolverCollectionBindingInfo binding in _resolverBindings .OfType <ResolverCollectionBindingInfo>()) { if (binding.ObjectType == null && binding.ObjectTypeName.IsEmpty) { binding.ObjectType = binding.ResolverType; } ObjectTypeBinding typeBinding = null; if (binding.ObjectType == null && typeRegistry .TryGetTypeBinding(binding.ObjectTypeName, out typeBinding)) { binding.ObjectType = typeBinding.Type; } if (binding.ObjectTypeName.IsEmpty && typeRegistry .TryGetTypeBinding(binding.ObjectType, out typeBinding)) { binding.ObjectTypeName = typeBinding.Name; } if (binding.ObjectTypeName.IsEmpty) { binding.ObjectTypeName = binding.ObjectType.GetGraphQLName(); } // TODO : error handling if object type cannot be resolverd CompleteFieldResolverBindungs( typeBinding, binding.Fields); } }
private string LookupFieldName( ITypeRegistry typeRegistry, FieldMember fieldResolverMember) { MemberInfo member = fieldResolverMember.Member; foreach (ResolverCollectionBindingInfo resolverBinding in _resolverBindings[fieldResolverMember.TypeName]) { FieldResolverBindungInfo fieldBinding = resolverBinding.Fields .FirstOrDefault(t => t.FieldMember == member); if (fieldBinding != null) { return(fieldBinding.FieldName); } } if (typeRegistry.TryGetTypeBinding( fieldResolverMember.TypeName, out ObjectTypeBinding binding)) { FieldBinding fieldBinding = binding.Fields.Values .FirstOrDefault(t => t.Member == member); if (fieldBinding != null) { return(fieldBinding.Name); } } return(fieldResolverMember.FieldName); }
internal void CompleteInputField( ITypeRegistry typeRegistry, Action <SchemaError> reportError, INamedType parentType) { if (!_completed) { DeclaringType = parentType; Type = this.ResolveFieldType <IInputType>(typeRegistry, reportError, _typeReference); if (Type != null) { CompleteDefaultValue(Type, reportError, parentType); if (parentType is InputObjectType && Property == null && typeRegistry.TryGetTypeBinding(parentType, out InputObjectTypeBinding binding) && binding.Fields.TryGetValue(Name, out InputFieldBinding fieldBinding)) { Property = fieldBinding.Property; } } _completed = true; } }
internal void CompleteInputField( ITypeRegistry typeRegistry, Action <SchemaError> reportError, INamedType parentType) { _type = _typeFactory(typeRegistry); if (_type == null) { reportError(new SchemaError( $"The type of the input field {Name} is null.", parentType)); } if (_defaultValueFactory == null) { DefaultValue = new NullValueNode(null); } else { DefaultValue = _defaultValueFactory(typeRegistry); } if (parentType is InputObjectType && Property == null && typeRegistry.TryGetTypeBinding(parentType, out InputObjectTypeBinding binding) && binding.Fields.TryGetValue(Name, out InputFieldBinding fieldBinding)) { Property = fieldBinding.Property; } }
private void CompleteNativeType( ITypeRegistry typeRegistry, Action <SchemaError> reportError) { if (_nativeType == null && typeRegistry.TryGetTypeBinding(this, out InputObjectTypeBinding typeBinding)) { _nativeType = typeBinding.Type; } if (_nativeType == null) { reportError(new SchemaError( "Could not resolve the native type associated with " + $"input object type `{Name}`.", this)); } _deserialize = InputObjectDeserializerFactory.Create( reportError, this, _nativeType); }
private void CompleteDelegateBindings(ITypeRegistry typeRegistry) { foreach (ResolverDelegateBindingInfo binding in _resolverBindings .OfType <ResolverDelegateBindingInfo>()) { if (binding.ObjectTypeName == null && binding.ObjectType == null) { // skip incomplete binding --> todo: maybe an exception? continue; } if (binding.ObjectTypeName == null && typeRegistry.TryGetTypeBinding( binding.ObjectType, out ObjectTypeBinding typeBinding)) { FieldBinding fieldBinding = typeBinding?.Fields.Values .FirstOrDefault(t => t.Member == binding.FieldMember); binding.ObjectTypeName = typeBinding.Name; binding.FieldName = fieldBinding.Name; } } }