public TypeDiscoverer( IDescriptorContext context, TypeRegistry typeRegistry, TypeLookup typeLookup, IEnumerable <ITypeReference> initialTypes, ITypeInterceptor interceptor, bool includeSystemTypes = true) { if (context is null) { throw new ArgumentNullException(nameof(context)); } if (typeRegistry is null) { throw new ArgumentNullException(nameof(typeRegistry)); } if (typeLookup is null) { throw new ArgumentNullException(nameof(typeLookup)); } if (initialTypes is null) { throw new ArgumentNullException(nameof(initialTypes)); } if (interceptor is null) { throw new ArgumentNullException(nameof(interceptor)); } _typeRegistry = typeRegistry; if (includeSystemTypes) { _unregistered.AddRange( IntrospectionTypes.CreateReferences(context.TypeInspector)); _unregistered.AddRange( Directives.CreateReferences(context.TypeInspector)); } _unregistered.AddRange(typeRegistry.GetTypeRefs()); _unregistered.AddRange(initialTypes.Distinct()); _typeRegistrar = new TypeRegistrar(context, typeRegistry, typeLookup, interceptor); _handlers = new ITypeRegistrarHandler[] { new SchemaTypeReferenceHandler(), new ExtendedTypeReferenceHandler(context.TypeInspector), new SyntaxTypeReferenceHandler(context.TypeInspector) }; _typeInspector = context.TypeInspector; }