Ejemplo n.º 1
0
        protected override void OnCompleteFields(
            IDictionary <NameString, ObjectFieldDefinition> fields,
            ISet <MemberInfo> handledMembers)
        {
            HashSet <string> subscribeResolver = null;

            if (Definition.Fields.IsImplicitBinding())
            {
                FieldDescriptorUtilities.AddImplicitFields(
                    this,
                    Definition.FieldBindingType,
                    p =>
                {
                    ObjectFieldDescriptor descriptor = ObjectFieldDescriptor.New(
                        Context, p, Definition.RuntimeType, Definition.FieldBindingType);
                    Fields.Add(descriptor);
                    return(descriptor.CreateDefinition());
                },
                    fields,
                    handledMembers,
                    include: IncludeField);
            }

            base.OnCompleteFields(fields, handledMembers);

            bool IncludeField(IReadOnlyList <MemberInfo> all, MemberInfo current)
            {
                if (subscribeResolver is null)
                {
                    subscribeResolver = new HashSet <string>();

                    foreach (MemberInfo member in all)
                    {
                        if (member.IsDefined(typeof(SubscribeAttribute)))
                        {
                            SubscribeAttribute attribute =
                                member.GetCustomAttribute <SubscribeAttribute>();
                            if (attribute.With is not null)
                            {
                                subscribeResolver.Add(attribute.With);
                            }
                        }
                    }
                }

                return(!subscribeResolver.Contains(current.Name));
            }
        }
Ejemplo n.º 2
0
        protected override void OnCompleteFields(
            IDictionary <NameString, ObjectFieldDefinition> fields,
            ISet <MemberInfo> handledMembers)
        {
            if (Definition.Fields.IsImplicitBinding())
            {
                FieldDescriptorUtilities.AddImplicitFields(
                    this,
                    Definition.FieldBindingType,
                    p =>
                {
                    ObjectFieldDescriptor descriptor = ObjectFieldDescriptor.New(Context, p);
                    Fields.Add(descriptor);
                    return(descriptor.CreateDefinition());
                },
                    fields,
                    handledMembers);
            }

            base.OnCompleteFields(fields, handledMembers);
        }