/// <summary> /// Initializes the schema: /// * Add any controllers to the schema instance that were configured during startup. /// * add all methods, virtual graph types, return types parameters and property configuration. /// * Add any additional types added at startup. /// * Register introspection meta-fields. /// * Compile and instantiate the resolution pipeline. /// </summary> /// <param name="schema">The schema to initialize.</param> public virtual void Initialize(ISchema schema) { Validation.ThrowIfNull(schema, nameof(schema)); if (schema.IsInitialized) { return; } lock (schema) { if (schema.IsInitialized) { return; } schema.Configuration.Merge(_options.CreateConfiguration()); var manager = new GraphSchemaManager(schema); manager.AddIntrospectionFields(); manager.AddBuiltInDirectives(); // add any configured types to this instance foreach (var type in _options.RegisteredSchemaTypes) { var typeDeclaration = type.SingleAttributeOrDefault <GraphTypeAttribute>(); if (typeDeclaration != null && typeDeclaration.PreventAutoInclusion) { continue; } manager.EnsureGraphType(type); } manager.BuildIntrospectionData(); schema.IsInitialized = true; } }