コード例 #1
0
        public FullObjectGraphTraversalStrategy(Serializer serializer, ITypeInspector typeDescriptor, ITypeResolver typeResolver, int maxRecursion, INamingConvention namingConvention)
        {
            if (maxRecursion <= 0)
            {
                throw new ArgumentOutOfRangeException("maxRecursion", maxRecursion, "maxRecursion must be greater than 1");
            }

            this.serializer = serializer;

            if (typeDescriptor == null)
            {
                throw new ArgumentNullException("typeDescriptor");
            }

            this.typeDescriptor = typeDescriptor;

            if (typeResolver == null)
            {
                throw new ArgumentNullException("typeResolver");
            }

            this.typeResolver = typeResolver;

            this.maxRecursion = maxRecursion;
            this.namingConvention = namingConvention;
        }
コード例 #2
0
 public CachedTypeInspector(ITypeInspector innerTypeDescriptor)
 {
     if (innerTypeDescriptor == null)
     {
         throw new ArgumentNullException("innerTypeDescriptor");
     }
     _innerTypeDescriptor = innerTypeDescriptor;
 }
コード例 #3
0
 //--- Constructors ---
 public IsolatedTypeInspector() {
     _log.Debug("set up appdomain");
     var appDomainSetup = new AppDomainSetup();
     string currentBase = Path.GetFullPath(AppDomain.CurrentDomain.BaseDirectory);
     appDomainSetup.ApplicationBase = currentBase;
     _assemblyInspectorDomain = AppDomain.CreateDomain("assembly-inspector", null, appDomainSetup);
     _typeInspector = (ITypeInspector)_assemblyInspectorDomain.CreateInstanceAndUnwrap("mindtouch.reflection", "MindTouch.Reflection.TypeInspector");
     _log.Debug("app domain created");
 }
コード例 #4
0
        public NamingConventionTypeInspector(ITypeInspector innerTypeDescriptor, INamingConvention namingConvention)
        {
            if (innerTypeDescriptor == null)
            {
                throw new ArgumentNullException("innerTypeDescriptor");
            }

            this.innerTypeDescriptor = innerTypeDescriptor;

            if (namingConvention == null)
            {
                throw new ArgumentNullException("namingConvention");
            }

            this.namingConvention = namingConvention;
        }
コード例 #5
0
        public NamingConventionTypeInspector(ITypeInspector innerTypeDescriptor, INamingConvention namingConvention)
        {
            if (innerTypeDescriptor == null)
            {
                throw new ArgumentNullException("innerTypeDescriptor");
            }

            this.innerTypeDescriptor = innerTypeDescriptor;

            if (namingConvention == null)
            {
                throw new ArgumentNullException("namingConvention");
            }

            this.namingConvention = namingConvention;
        }
コード例 #6
0
        protected override void OnComplete(
            IConventionContext context,
            SortConventionDefinition definition)
        {
            if (definition.Provider is null)
            {
                throw SortConvention_NoProviderFound(GetType(), definition.Scope);
            }

            if (definition.ProviderInstance is null)
            {
                _provider =
                    context.Services.GetOrCreateService <ISortProvider>(definition.Provider) ??
                    throw SortConvention_NoProviderFound(GetType(), definition.Scope);
            }
            else
            {
                _provider = definition.ProviderInstance;
            }

            _namingConventions = context.DescriptorContext.Naming;

            _operations = definition.Operations.ToDictionary(
                x => x.Id,
                SortOperation.FromDefinition);

            foreach (var operation in _operations.Values)
            {
                if (!operation.Name.HasValue)
                {
                    throw SortConvention_OperationIsNotNamed(this, operation);
                }
            }

            _bindings         = definition.Bindings;
            _defaultBinding   = definition.DefaultBinding;
            _inputTypeConfigs = definition.Configurations;
            _enumTypeConfigs  = definition.EnumConfigurations;
            _argumentName     = definition.ArgumentName;

            if (_provider is ISortProviderConvention init)
            {
                init.Initialize(context);
            }

            _typeInspector = context.DescriptorContext.TypeInspector;
        }
コード例 #7
0
        public TypeDescriptorHelper(
            INamingConventions namingConventions,
            ITypeInspector typeInspector
            )
        {
            this.namingConventions = namingConventions;
            this.typeInspector     = typeInspector;

            typeRegistrar = new DefaultTypeRegistrar <IType>(
                placeholderGenerator: MockITypeGenerator,
                interceptor: TryGetScalarType
                );

            xmlDocumentationProvider = new XmlDocumentationProvider(
                new XmlDocumentationFileResolver()
                );
        }
コード例 #8
0
        private DescriptorContext(
            INamingConventions naming,
            ITypeInspector inspector)
        {
            if (naming == null)
            {
                throw new ArgumentNullException(nameof(naming));
            }

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

            Naming    = naming;
            Inspector = inspector;
        }
コード例 #9
0
 public FullObjectGraphTraversalStrategy(ITypeInspector typeDescriptor, ITypeResolver typeResolver, int maxRecursion, INamingConvention namingConvention)
 {
     if (maxRecursion <= 0)
     {
         throw new ArgumentOutOfRangeException("maxRecursion", maxRecursion, "maxRecursion must be greater than 1");
     }
     if (typeDescriptor == null)
     {
         throw new ArgumentNullException("typeDescriptor");
     }
     this.typeDescriptor = typeDescriptor;
     if (typeResolver == null)
     {
         throw new ArgumentNullException("typeResolver");
     }
     this.typeResolver     = typeResolver;
     this.maxRecursion     = maxRecursion;
     this.namingConvention = namingConvention;
 }
コード例 #10
0
        /// <inheritdoc />
        protected override void Complete(IConventionContext context)
        {
            if (Definition?.Provider is null)
            {
                throw FilterConvention_NoProviderFound(GetType(), Definition?.Scope);
            }

            if (Definition.ProviderInstance is null)
            {
                _provider =
                    context.Services.GetOrCreateService <IFilterProvider>(Definition.Provider) ??
                    throw FilterConvention_NoProviderFound(GetType(), Definition.Scope);
            }
            else
            {
                _provider = Definition.ProviderInstance;
            }

            _namingConventions = context.DescriptorContext.Naming;
            _operations        =
                Definition.Operations.ToDictionary(x => x.Id, FilterOperation.FromDefinition);
            _bindings     = Definition.Bindings;
            _configs      = Definition.Configurations;
            _argumentName = Definition.ArgumentName;
            _useAnd       = Definition.UseAnd;
            _useOr        = Definition.UseOr;

            if (_provider is IFilterProviderConvention init)
            {
                IReadOnlyList <IFilterProviderExtension> extensions =
                    CollectExtensions(context.Services, Definition);
                init.Initialize(context, this);
                MergeExtensions(context, init, extensions);
                init.Complete(context);
            }

            _typeInspector = context.DescriptorContext.TypeInspector;

            // It is important to always call base to continue the cleanup and the disposal of the
            // definition
            base.Complete(context);
        }
コード例 #11
0
        private void AddImplicitResolverBindings(
            ITypeInspector inspector,
            INamingConventions naming,
            ResolverTypeBindingInfo binding)
        {
            var names = new HashSet <NameString>(
                binding.Fields.Select(t => t.FieldName));

            foreach (MemberInfo member in inspector.GetMembers(binding.ResolverType))
            {
                NameString fieldName =
                    naming.GetMemberName(member, MemberKind.ObjectField);
                if (names.Add(fieldName))
                {
                    var builder = ResolverFieldBindingBuilder.New();
                    builder.SetResolver(member);
                    builder.SetField(fieldName);
                    binding.Fields = binding.Fields.Add(builder.Create());
                }
            }
        }
コード例 #12
0
    private static IExtendedType RewriteType(ITypeInspector typeInspector, ITypeInfo typeInfo)
    {
        Type current = typeof(IdType);

        if (typeInfo.Components.Count > 1)
        {
            foreach (TypeComponent component in typeInfo.Components.Reverse().Skip(1))
            {
                if (component.Kind == TypeComponentKind.NonNull)
                {
                    current = typeof(NonNullType <>).MakeGenericType(current);
                }
                else if (component.Kind == TypeComponentKind.List)
                {
                    current = typeof(ListType <>).MakeGenericType(current);
                }
            }
        }

        return(typeInspector.GetType(current));
    }
コード例 #13
0
            private static bool IsOperationType(
                ObjectType objectType,
                OperationType operationType,
                ITypeInspector typeInspector,
                Dictionary <OperationType, ITypeReference> operations)
            {
                if (operations.TryGetValue(operationType, out ITypeReference? typeRef))
                {
                    if (typeRef is SchemaTypeReference sr)
                    {
                        return(sr.Type == objectType);
                    }

                    if (typeRef is ExtendedTypeReference cr)
                    {
                        return(cr.Type == typeInspector.GetType(objectType.GetType()) ||
                               cr.Type == typeInspector.GetType(objectType.RuntimeType));
                    }

                    if (typeRef is SyntaxTypeReference str)
                    {
                        return(objectType.Name.Equals(str.Type.NamedType().Name.Value));
                    }
                }
                else if (operationType == OperationType.Query)
                {
                    return(objectType.Name.Equals(OperationTypeNames.Query));
                }
                else if (operationType == OperationType.Mutation)
                {
                    return(objectType.Name.Equals(OperationTypeNames.Mutation));
                }
                else if (operationType == OperationType.Subscription)
                {
                    return(objectType.Name.Equals(OperationTypeNames.Subscription));
                }

                return(false);
            }
コード例 #14
0
    public override void OnBeforeCompleteType(
        ITypeCompletionContext completionContext,
        DefinitionBase?definition,
        IDictionary <string, object?> contextData)
    {
        if ((completionContext.IsQueryType ?? false) &&
            definition is ObjectTypeDefinition objectTypeDefinition)
        {
            ITypeInspector typeInspector = completionContext.TypeInspector;

            IIdSerializer serializer =
                completionContext.Services.GetService <IIdSerializer>() ??
                new IdSerializer();

            ObjectFieldDefinition typeNameField = objectTypeDefinition.Fields.First(
                t => t.Name.Equals(IntrospectionFields.TypeName) && t.IsIntrospectionField);
            var index = objectTypeDefinition.Fields.IndexOf(typeNameField);

            CreateNodeField(typeInspector, serializer, objectTypeDefinition.Fields, index + 1);
            CreateNodesField(serializer, objectTypeDefinition.Fields, index + 2);
        }
    }
コード例 #15
0
        private static Type GetArgumentType(
            ObjectFieldDefinition definition,
            Type?filterType,
            ITypeInspector typeInspector)
        {
            Type?argumentType = filterType;

            if (argumentType is null)
            {
                if (definition.ResultType is null ||
                    definition.ResultType == typeof(object) ||
                    !typeInspector.TryCreateTypeInfo(
                        definition.ResultType, out ITypeInfo? typeInfo))
                {
                    throw new SchemaException(
                              SchemaErrorBuilder.New()
                              .SetMessage("Cannot handle the specified type.")
                              .SetExtension("fieldName", definition.Name)
                              .Build());
                }

                argumentType = typeof(SortInputType <>).MakeGenericType(typeInfo.NamedType);
            }

            if (argumentType == typeof(object))
            {
                // TODO : resources
                throw new SchemaException(
                          SchemaErrorBuilder.New()
                          .SetMessage(
                              "The sort type cannot be " +
                              "inferred from `System.Object`.")
                          .SetCode(ErrorCodes.Filtering.FilterObjectType)
                          .Build());
            }

            return(argumentType);
        }
コード例 #16
0
    private static void CreateNodeField(
        ITypeInspector typeInspector,
        IIdSerializer serializer,
        IList <ObjectFieldDefinition> fields,
        int index)
    {
        ExtendedTypeReference node = typeInspector.GetTypeRef(typeof(NodeType));
        ExtendedTypeReference id   = typeInspector.GetTypeRef(typeof(NonNullType <IdType>));

        var field = new ObjectFieldDefinition(
            Node,
            Relay_NodeField_Description,
            node,
            ResolveNodeAsync)
        {
            Arguments = { new(Id, Relay_NodeField_Id_Description, id) }
        };

        fields.Insert(index, field);

        ValueTask <object?> ResolveNodeAsync(IResolverContext ctx)
        => ResolveSingleNode(ctx, serializer, Id);
    }
コード例 #17
0
            private static RootTypeKind GetOperationKind(
                TypeSystemObjectBase type,
                ITypeInspector typeInspector,
                Dictionary <OperationType, ITypeReference> operations)
            {
                if (type is ObjectType objectType)
                {
                    if (IsOperationType(
                            objectType,
                            OperationType.Query,
                            typeInspector,
                            operations))
                    {
                        return(RootTypeKind.Query);
                    }

                    if (IsOperationType(
                            objectType,
                            OperationType.Mutation,
                            typeInspector,
                            operations))
                    {
                        return(RootTypeKind.Mutation);
                    }

                    if (IsOperationType(
                            objectType,
                            OperationType.Subscription,
                            typeInspector,
                            operations))
                    {
                        return(RootTypeKind.Subscription);
                    }
                }

                return(RootTypeKind.None);
            }
コード例 #18
0
        private static IExtendedType GetSourceType(
            ITypeInspector typeInspector,
            ObjectFieldDefinition definition,
            Type entityType)
        {
            // if an explicit result type is defined we will type it since it expresses the
            // intend.
            if (definition.ResultType is not null)
            {
                return(typeInspector.GetType(definition.ResultType));
            }

            // Otherwise we will look at specified members and extract the return type.
            MemberInfo?member = definition.ResolverMember ?? definition.Member;

            if (member is not null)
            {
                return(typeInspector.GetReturnType(member, true));
            }

            // if we were not able to resolve the source type we will assume that it is
            // an enumerable of the entity type.
            return(typeInspector.GetType(typeof(IEnumerable <>).MakeGenericType(entityType)));
        }
コード例 #19
0
 /// <summary>
 /// Overrides the default ExceptionTypeInspector.
 /// </summary>
 /// <returns>this</returns>
 public TypeInspectorsRegistration OverrideExceptionInspector(ITypeInspector exceptionTypeInspector)
 {
     _exceptionTypeInspector = exceptionTypeInspector;
     return this;
 }
コード例 #20
0
 public MEXTypeInspector(ITypeInspector innerTypeDescriptor)
 {
     _innerTypeDescriptor = innerTypeDescriptor;
 }
 public ReadableAndWritablePropertiesTypeInspector(ITypeInspector innerTypeDescriptor)
 {
     _innerTypeDescriptor = innerTypeDescriptor;
 }
コード例 #22
0
		public YamlAttributesTypeInspector(ITypeInspector innerTypeDescriptor)
		{
			this.innerTypeDescriptor = innerTypeDescriptor;
		}
コード例 #23
0
 /// <summary>
 /// Overrides the default EnumTypeInspector.
 /// </summary>
 /// <returns>this</returns>
 public TypeInspectorsRegistration OverrideEnumInspector(ITypeInspector enumTypeInspector)
 {
     _enumTypeInspector = enumTypeInspector;
     return this;
 }
コード例 #24
0
 public StringQuotingTypeInspector(ITypeInspector typeInspector)
 {
     _typeInspector = typeInspector ?? throw new ArgumentNullException(nameof(typeInspector));
 }
コード例 #25
0
 /// <summary>
 /// Initializes a new instance of the <see cref="CommentGatheringTypeInspector"/> class.
 /// </summary>
 /// <param name="innerTypeDescriptor">The inner type description instance.</param>
 public CommentGatheringTypeInspector(ITypeInspector innerTypeDescriptor)
 {
     this.innerTypeDescriptor = innerTypeDescriptor ?? throw new ArgumentNullException("innerTypeDescriptor");
 }
コード例 #26
0
		public ObjectNodeDeserializer(IObjectFactory objectFactory, ITypeInspector typeDescriptor, bool ignoreUnmatched)
		{
			_objectFactory = objectFactory;
			_typeDescriptor = typeDescriptor;
			_ignoreUnmatched = ignoreUnmatched;
		}
コード例 #27
0
 public static ITypeReference GetInputReturnTypeRef(
     this ITypeInspector typeInspector,
     MemberInfo member)
 {
     return(typeInspector.GetReturnTypeRef(member, TypeContext.Input));
 }
コード例 #28
0
 static TypeInspector()
 {
     All = new AnnotationInspectorAll();
     Default = new AnnotationInspectorDefault();
 }
コード例 #29
0
 /// <summary>Inspectors to be used run before the CatchAll inspector</summary>
 public TypeInspectorsRegistration RegisterInspector(ITypeInspector inspector)
 {
     if (inspector == null) throw new ArgumentNullException("inspector");
     _inspectors.Add(inspector);
     return this;
 }
コード例 #30
0
 public ObjectNodeDeserializer(IObjectFactory objectFactory, ITypeInspector typeDescriptor)
 {
     _objectFactory = objectFactory;
     _typeDescriptor = typeDescriptor;
 }
 public QueryableSpatialOverlapsOperationHandlerBase(
     IFilterConvention convention,
     ITypeInspector inspector)
     : base(convention, inspector, _overlap)
 {
 }
コード例 #32
0
 public QueryableSimpleMethodTest(ITypeInspector typeInspector)
 {
     _extendedType = typeInspector.GetReturnType(Method);
 }
コード例 #33
0
 public static DecisionServiceClient <TContext> Create <TContext>(DecisionServiceConfiguration config, ITypeInspector typeInspector = null, ApplicationClientMetadata metaData = null)
 {
     return(new DecisionServiceClient <TContext>(
                config,
                DownloadMetadata(config, metaData),
                new VWExplorer <TContext>(config.ModelStream, typeInspector, config.DevelopmentMode)));
 }
コード例 #34
0
 public HtmlDocumentationBuilder(ITypeInspector typeInspector) {
     _typeInspector = typeInspector;
 }
コード例 #35
0
 public QueryableSpatialIntersectsOperationHandler(
     IFilterConvention convention,
     ITypeInspector inspector)
     : base(convention, inspector)
 {
 }
コード例 #36
0
 static JsonTypeInspector()
 {
     Default = new JsonTypeInspectorImpl();
 }
コード例 #37
0
        private static void AddSerializerToObjectField(
            ITypeCompletionContext completionContext,
            ObjectFieldDefinition definition,
            FieldMiddleware placeholder,
            NameString typeName)
        {
            ITypeInspector typeInspector = completionContext.TypeInspector;
            IExtendedType? resultType;

            if (definition.ResultType is not null)
            {
                resultType = typeInspector.GetType(definition.ResultType);
            }
            else if (definition.Type is ExtendedTypeReference typeReference)
            {
                resultType = typeReference.Type;
            }
            else
            {
                throw new SchemaException(SchemaErrorBuilder.New()
                                          .SetMessage("Unable to resolve type from field `{0}`.", definition.Name)
                                          .SetTypeSystemObject(completionContext.Type)
                                          .Build());
            }

            NameString schemaName = default;

            completionContext.DescriptorContext.SchemaCompleted += (sender, args) =>
                                                                   schemaName = args.Schema.Name;

            IIdSerializer serializer =
                completionContext.Services.GetService <IIdSerializer>() ??
                new IdSerializer();
            var index = definition.MiddlewareComponents.IndexOf(placeholder);

            if (typeName.IsEmpty)
            {
                typeName = completionContext.Type.Name;
            }

            definition.MiddlewareComponents[index] = next => async context =>
            {
                await next(context).ConfigureAwait(false);

                if (context.Result is not null)
                {
                    if (resultType.IsArrayOrList)
                    {
                        var list = new List <object?>();
                        foreach (object?element in (IEnumerable)context.Result)
                        {
                            list.Add(element is null
                                ? element
                                : serializer.Serialize(schemaName, typeName, element));
                        }
                        context.Result = list;
                    }
                    else
                    {
                        context.Result = serializer.Serialize(schemaName, typeName, context.Result);
                    }
                }
            };
        }
コード例 #38
0
ファイル: YmlExtensions.cs プロジェクト: joaofx/Miru
 public FilterPropertiesInspector(ITypeInspector innerTypeDescriptor)
 {
     _innerTypeDescriptor = innerTypeDescriptor;
 }
コード例 #39
0
 public ObjectNodeDeserializer(IObjectFactory objectFactory, ITypeInspector typeDescriptor, bool ignoreUnmatched)
 {
     _objectFactory   = objectFactory;
     _typeDescriptor  = typeDescriptor;
     _ignoreUnmatched = ignoreUnmatched;
 }
コード例 #40
0
 //--- Constructors ---
 public HtmlDocumentationBuilder() {
     _typeInspector = new IsolatedTypeInspector();
 }
コード例 #41
0
 public AutoRestTypeInspector(ITypeInspector inner)
 {
     _inner = inner;
 }
コード例 #42
0
 public YamlAttributesTypeInspector(ITypeInspector innerTypeDescriptor)
 {
     this.innerTypeDescriptor = innerTypeDescriptor;
 }
コード例 #43
0
 public SortedTypeInspector(ITypeInspector innerTypeInspector)
 {
     _innerTypeInspector = innerTypeInspector;
 }
コード例 #44
0
 public RoundtripObjectGraphTraversalStrategy(Serializer serializer, ITypeInspector typeDescriptor, ITypeResolver typeResolver, int maxRecursion)
     : base(serializer, typeDescriptor, typeResolver, maxRecursion, null)
 {
 }
 public ReadableAndWritablePropertiesTypeInspector(ITypeInspector innerTypeDescriptor)
 {
     _innerTypeDescriptor = innerTypeDescriptor;
 }
 public RoundtripObjectGraphTraversalStrategy(Serializer serializer, ITypeInspector typeDescriptor, ITypeResolver typeResolver, int maxRecursion)
     : base(serializer, typeDescriptor, typeResolver, maxRecursion)
 {
 }