Esempio n. 1
0
        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);
        }
Esempio n. 3
0
        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;
            }
        }
Esempio n. 4
0
        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;
            }
        }
Esempio n. 5
0
        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;
                }
            }
        }