示例#1
0
        public bool TryGetScalarGraphType(out Type type)
        {
            type = OverriddenGraphType;

            if (type != null)
            {
                return(true);
            }

            if (!_scalarTypeMap.TryGetGraphType(Property.PropertyType, out type))
            {
                return(false);
            }

            if (Nullability == Nullability.Unspecified)
            {
                return(true);
            }

            if (Nullability == Nullability.NonNull)
            {
                type = type.MakeNonNullable();
            }
            else if (Nullability == Nullability.Nullable)
            {
                type = type.UnwrapNonNullable();
            }
            return(true);
        }
示例#2
0
        protected override IGraphType GetGraphType(GraphTypeCache cache, IServiceCollection services)
        {
            if (_scalarTypeMap.TryGetGraphType(typeof(TProp), out var scalarGraphType))
            {
                var listGraphType    = typeof(ListGraphType <>).MakeGenericType(scalarGraphType);
                var listTypeInstance = (ListGraphType)Activator.CreateInstance(listGraphType);
                listTypeInstance.ResolvedType = (IGraphType)Activator.CreateInstance(scalarGraphType);
                if (listTypeInstance.ResolvedType is NonNullGraphType elemTypeInstance)
                {
                    elemTypeInstance.ResolvedType = (IGraphType)Activator.CreateInstance(scalarGraphType.GetGenericArguments().Single());
                }

                return(listTypeInstance);
            }

            return(new ListGraphType(cache.GetOrCreate(typeof(TProp), services)));
        }