示例#1
0
        private void CompleteInterfaces(
            ITypeInitializationContext context)
        {
            if (ClrType != typeof(object))
            {
                Type[] possibleInterfaceTypes = ClrType.GetInterfaces();
                for (int i = 0; i < possibleInterfaceTypes.Length; i++)
                {
                    InterfaceType type = context.GetType <InterfaceType>(
                        new TypeReference(
                            possibleInterfaceTypes[i],
                            TypeContext.Output));
                    if (type != null)
                    {
                        _interfaceMap[type.Name] = type;
                    }
                }
            }

            foreach (InterfaceType interfaceType in _interfaces
                     .Select(t => context.GetType <InterfaceType>(t))
                     .Where(t => t != null))
            {
                if (!_interfaceMap.ContainsKey(interfaceType.Name))
                {
                    _interfaceMap[interfaceType.Name] = interfaceType;
                }
            }
        }
示例#2
0
        public static T ResolveFieldType <T>(
            this ITypeInitializationContext context,
            IField field,
            TypeReference typeReference)
            where T : IType
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

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

            T type = default(T);

            if (typeReference != null)
            {
                type = context.GetType <T>(typeReference);
            }

            if (ReferenceEquals(type, default(T)))
            {
                context.ReportError(new SchemaError(
                                        $"The type `{typeReference}` of field " +
                                        $"`{field.DeclaringType.Name}.{field.Name}` " +
                                        "could not be resolved to a valid schema type.",
                                        field.DeclaringType));
            }

            return(type);
        }
示例#3
0
        public static T ResolveFieldType <T>(
            this ITypeInitializationContext context,
            IField field,
            TypeReference typeReference)
            where T : IType
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

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

            T type = default(T);

            if (typeReference != null)
            {
                type = context.GetType <T>(typeReference);
            }

            if (ReferenceEquals(type, default(T)))
            {
                context.ReportError(new SchemaError(
                                        TypeResources.Field_Cannot_ResolveType(
                                            field.DeclaringType.Name,
                                            field.Name,
                                            typeReference),
                                        field.DeclaringType));
            }

            return(type);
        }
示例#4
0
 protected virtual ISet <ObjectType> CreateUnionTypeSet(
     ITypeInitializationContext context)
 {
     return(new HashSet <ObjectType>(_types
                                     .Select(t => context.GetType <ObjectType>(t))
                                     .Where(t => t != null)));
 }
        protected override void OnCompleteType(
            ITypeInitializationContext context)
        {
            EdgeType = context.GetType <EdgeType <T> >(
                new TypeReference(typeof(EdgeType <T>)));

            base.OnCompleteType(context);
        }
示例#6
0
 private void CompleteInterfaces(
     ITypeInitializationContext context)
 {
     if (_interfaces != null)
     {
         foreach (InterfaceType interfaceType in _interfaces
                  .Select(t => context.GetType <InterfaceType>(t))
                  .Where(t => t != null))
         {
             _interfaceMap[interfaceType.Name] = interfaceType;
         }
     }
 }
示例#7
0
        private void CompleteTypes(
            ITypeInitializationContext context)
        {
            if (_types != null)
            {
                foreach (ObjectType memberType in _types
                         .Select(t => context.GetType <ObjectType>(t))
                         .Where(t => t != null))
                {
                    _typeMap[memberType.Name] = memberType;
                }
            }

            if (_typeMap.Count == 0)
            {
                context.ReportError(new SchemaError(
                                        "A Union type must define one or more unique member types.",
                                        this));
            }
        }