public SubscriberBuilder GetOrAddSubscriber(TypeSystem.ComplexType type, string fieldName)
        {
            if (_subscribers.TryGetValue(type.Name, out var fields))
            {
                if (fields.TryGetValue(fieldName, out var builder))
                {
                    return(builder);
                }
            }

            return(Subscriber(type, fieldName));
        }
        public ResolverBuilder GetOrAddResolver(TypeSystem.ComplexType type, string fieldName)
        {
            if (_resolvers.TryGetValue(type.Name, out var fields))
            {
                if (fields.TryGetValue(fieldName, out var builder))
                {
                    return(builder);
                }
            }

            return(Resolver(type, fieldName));
        }
        public bool TryGetResolver(TypeSystem.ComplexType type, string fieldName, out ResolverBuilder resolver)
        {
            if (_resolvers.TryGetValue(type.Name, out var fields))
            {
                if (fields.TryGetValue(fieldName, out resolver))
                {
                    return(true);
                }
            }

            resolver = null;
            return(false);
        }
        public bool TryGetField(TypeSystem.ComplexType owner, string fieldName, out TypeSystem.IField field)
        {
            if (_fields.TryGetValue(owner.Name, out var fields))
            {
                if (fields.TryGetValue(fieldName, out field))
                {
                    return(true);
                }
            }

            field = null;
            return(false);
        }
        public bool TryGetSubscriber(TypeSystem.ComplexType type, string fieldName, out SubscriberBuilder subscriber)
        {
            if (_subscribers.TryGetValue(type.Name, out var fields))
            {
                if (fields.TryGetValue(fieldName, out subscriber))
                {
                    return(true);
                }
            }

            subscriber = null;
            return(false);
        }
        public IEnumerable <KeyValuePair <string, TypeSystem.IField> > GetFields(TypeSystem.ComplexType type)
        {
            if (type == null)
            {
                throw new ArgumentNullException(nameof(type));
            }

            if (!_fields.TryGetValue(type.Name, out var fields))
            {
                return(Enumerable.Empty <KeyValuePair <string, TypeSystem.IField> >());
            }

            return(fields);
        }