private static TypeInitializer CreateTypeInitializer(
                SchemaBuilder builder,
                IDescriptorContext context,
                IBindingLookup bindingLookup,
                IReadOnlyList <ITypeReference> typeReferences,
                TypeRegistry typeRegistry)
            {
                Dictionary <OperationType, ITypeReference> operations =
                    builder._operations.ToDictionary(t => t.Key, t => t.Value(context.TypeInspector));

                var interceptor = new AggregateTypeInitializationInterceptor(
                    CreateInterceptors(builder, context.Services));

                var initializer = new TypeInitializer(
                    context,
                    typeRegistry,
                    typeReferences,
                    builder._resolverTypes,
                    interceptor,
                    builder._isOfType,
                    type => IsQueryType(context.TypeInspector, type, operations));

                foreach (FieldMiddleware component in builder._globalComponents)
                {
                    initializer.GlobalComponents.Add(component);
                }

                foreach (FieldReference reference in builder._resolvers.Keys)
                {
                    initializer.Resolvers[reference] = new RegisteredResolver(
                        typeof(object), builder._resolvers[reference]);
                }

                foreach (RegisteredResolver resolver in
                         bindingLookup.Bindings.SelectMany(t => t.CreateResolvers()))
                {
                    var reference = new FieldReference(
                        resolver.Field.TypeName,
                        resolver.Field.FieldName);
                    initializer.Resolvers[reference] = resolver;
                }

                foreach (KeyValuePair <Type, (CreateRef, CreateRef)> binding in builder._clrTypes)
                {
                    typeRegistry.TryRegister(
                        (ExtendedTypeReference)binding.Value.Item1(context.TypeInspector),
                        binding.Value.Item2.Invoke(context.TypeInspector));
                }

                return(initializer);
            }
        private TypeInitializer CreateTypeInitializer(
            IServiceProvider services,
            IDescriptorContext descriptorContext,
            IBindingLookup bindingLookup,
            IEnumerable <ITypeReference> types)
        {
            var interceptor = new AggregateTypeInitializationInterceptor(
                CreateInterceptors(services));

            var initializer = new TypeInitializer(
                services,
                descriptorContext,
                _contextData,
                types,
                _resolverTypes,
                interceptor,
                _isOfType,
                IsQueryType);

            foreach (FieldMiddleware component in _globalComponents)
            {
                initializer.GlobalComponents.Add(component);
            }

            foreach (FieldReference reference in _resolvers.Keys)
            {
                initializer.Resolvers[reference] = new RegisteredResolver(
                    typeof(object), _resolvers[reference]);
            }

            foreach (RegisteredResolver resolver in bindingLookup.Bindings
                     .SelectMany(t => t.CreateResolvers()))
            {
                var reference = new FieldReference(
                    resolver.Field.TypeName,
                    resolver.Field.FieldName);
                initializer.Resolvers[reference] = resolver;
            }

            foreach (KeyValuePair <IClrTypeReference, ITypeReference> binding in
                     _clrTypes)
            {
                initializer.ClrTypes[binding.Key] = binding.Value;
            }

            return(initializer);
        }