private IEnumerable <InputFieldBinding> CreateInputFieldBindings(
            TypeBindingInfo typeBindingInfo,
            IReadOnlyDictionary <string, InputField> fields)
        {
            Dictionary <string, InputFieldBinding> fieldBindings =
                new Dictionary <string, InputFieldBinding>();

            // create explicit field bindings
            foreach (FieldBindingInfo fieldBindingInfo in
                     typeBindingInfo.Fields)
            {
                if (fieldBindingInfo.Name == null)
                {
                    fieldBindingInfo.Name = GetNameFromMember(
                        fieldBindingInfo.Member);
                }

                if (fields.TryGetValue(fieldBindingInfo.Name, out InputField field))
                {
                    if (fieldBindingInfo.Member is PropertyInfo p)
                    {
                        fieldBindings[field.Name] = new InputFieldBinding(
                            fieldBindingInfo.Name, p, field);
                    }
                    // TODO : error -> exception?
                }
            }

            // create implicit field bindings
            if (typeBindingInfo.Behavior == BindingBehavior.Implicit)
            {
                Dictionary <string, PropertyInfo> properties =
                    GetProperties(typeBindingInfo.Type);
                foreach (InputField field in fields.Values
                         .Where(t => !fieldBindings.ContainsKey(t.Name)))
                {
                    if (properties.TryGetValue(field.Name,
                                               out PropertyInfo property))
                    {
                        fieldBindings[field.Name] = new InputFieldBinding(
                            field.Name, property, field);
                    }
                }
            }

            return(fieldBindings.Values);
        }
Example #2
0
        public BindField(
            TypeBindingInfo bindingInfo,
            FieldBindingInfo fieldBindingInfo)
        {
            if (bindingInfo == null)
            {
                throw new ArgumentNullException(nameof(bindingInfo));
            }

            if (fieldBindingInfo == null)
            {
                throw new ArgumentNullException(nameof(fieldBindingInfo));
            }

            _bindingInfo      = bindingInfo;
            _fieldBindingInfo = fieldBindingInfo;
        }
        private IEnumerable <InputFieldBinding> CreateInputFieldBindings(
            TypeBindingInfo typeBindingInfo,
            FieldCollection <InputField> fields)
        {
            var fieldBindings = new Dictionary <string, InputFieldBinding>();

            // create explicit field bindings
            foreach (FieldBindingInfo fieldBindingInfo in
                     typeBindingInfo.Fields)
            {
                if (fieldBindingInfo.Name == null)
                {
                    fieldBindingInfo.Name =
                        fieldBindingInfo.Member.GetGraphQLName();
                }

                if (fields.TryGetField(
                        fieldBindingInfo.Name,
                        out InputField field) &&
                    fieldBindingInfo.Member is PropertyInfo p)
                {
                    fieldBindings[field.Name] = new InputFieldBinding(
                        fieldBindingInfo.Name, p, field);
                }
            }

            // create implicit field bindings
            if (typeBindingInfo.Behavior == BindingBehavior.Implicit)
            {
                Dictionary <string, PropertyInfo> properties =
                    ReflectionUtils.GetProperties(typeBindingInfo.Type);
                foreach (InputField field in fields
                         .Where(t => !fieldBindings.ContainsKey(t.Name)))
                {
                    if (properties.TryGetValue(field.Name,
                                               out PropertyInfo property))
                    {
                        fieldBindings[field.Name] = new InputFieldBinding(
                            field.Name, property, field);
                    }
                }
            }

            return(fieldBindings.Values);
        }
        private IEnumerable <FieldBinding> CreateFieldBindings(
            TypeBindingInfo typeBindingInfo,
            FieldCollection <ObjectField> fields)
        {
            var fieldBindings = new Dictionary <string, FieldBinding>();

            // create explicit field bindings
            foreach (FieldBindingInfo fieldBindingInfo in
                     typeBindingInfo.Fields)
            {
                if (fieldBindingInfo.Name == null)
                {
                    fieldBindingInfo.Name =
                        fieldBindingInfo.Member.GetGraphQLName();
                }

                if (fields.TryGetField(
                        fieldBindingInfo.Name,
                        out ObjectField field))
                {
                    fieldBindings[field.Name] = new FieldBinding(
                        fieldBindingInfo.Name, fieldBindingInfo.Member, field);
                }
            }

            // create implicit field bindings
            if (typeBindingInfo.Behavior == BindingBehavior.Implicit)
            {
                Dictionary <string, MemberInfo> members =
                    ReflectionUtils.GetMembers(typeBindingInfo.Type);

                foreach (ObjectField field in fields
                         .Where(t => !fieldBindings.ContainsKey(t.Name)))
                {
                    if (members.TryGetValue(field.Name, out MemberInfo member))
                    {
                        fieldBindings[field.Name] = new FieldBinding(
                            field.Name, member, field);
                    }
                }
            }

            return(fieldBindings.Values);
        }
        private IEnumerable <FieldBinding> CreateFieldBindings(
            TypeBindingInfo typeBindingInfo,
            IReadOnlyDictionary <string, Field> fields)
        {
            Dictionary <string, FieldBinding> fieldBindings =
                new Dictionary <string, FieldBinding>();

            // create explicit field bindings
            foreach (FieldBindingInfo fieldBindingInfo in
                     typeBindingInfo.Fields)
            {
                if (fieldBindingInfo.Name == null)
                {
                    fieldBindingInfo.Name = GetNameFromMember(
                        fieldBindingInfo.Member);
                }

                if (fields.TryGetValue(fieldBindingInfo.Name, out Field field))
                {
                    fieldBindings[field.Name] = new FieldBinding(
                        fieldBindingInfo.Name, fieldBindingInfo.Member, field);
                }
            }

            // create implicit field bindings
            if (typeBindingInfo.Behavior == BindingBehavior.Implicit)
            {
                Dictionary <string, MemberInfo> members =
                    GetMembers(typeBindingInfo.Type);
                foreach (Field field in fields.Values
                         .Where(t => !fieldBindings.ContainsKey(t.Name)))
                {
                    if (members.TryGetValue(field.Name, out MemberInfo member))
                    {
                        fieldBindings[field.Name] = new FieldBinding(
                            field.Name, member, field);
                    }
                }
            }

            return(fieldBindings.Values);
        }