public LegacyOpenApiMetadataCacheProvider(
            IDomainModelProvider domainModelProvider,
            IResourceModelProvider resourceModelProvider,
            IProfileResourceModelProvider profileResourceModelProvider,
            IProfileResourceNamesProvider profileResourceNamesProvider,
            ICompositesMetadataProvider compositesMetadataProvider,
            ISchemaNameMapProvider schemaNameMapProvider,
            IOpenApiMetadataRouteProvider openApiMetadataRouteProvider,
            IOpenApiContentProvider[] openApiContentProviders)
        {
            _domainModelProvider          = domainModelProvider;
            _resourceModelProvider        = resourceModelProvider;
            _compositesMetadataProvider   = compositesMetadataProvider;
            _schemaNameMapProvider        = schemaNameMapProvider;
            _openApiMetadataRouteProvider = openApiMetadataRouteProvider;
            _profileResourceModelProvider = profileResourceModelProvider;
            _profileResourceNamesProvider = profileResourceNamesProvider;

            _openApiMetadataResourceFilters =
                new Dictionary <string, IOpenApiMetadataResourceStrategy>(StringComparer.InvariantCultureIgnoreCase)
            {
                { Descriptors, new SwaggerUiDescriptorOnlyStrategy() },
                { Resources, new SwaggerUiResourceOnlyStrategy() },
                { Extensions, new SdkGenExtensionResourceStrategy() },
                { EdFi, new SdkGenAllEdFiResourceStrategy() },
                { Profiles, new OpenApiProfileStrategy() },
                { Composites, new OpenApiCompositeStrategy(_compositesMetadataProvider) },
                { All, new SdkGenAllResourceStrategy() }
            };

            _openApiMetadataSectionByRoute =
                new Dictionary <string, Func <IEnumerable <OpenApiContent> > >
            {
                { MetadataRouteConstants.Schema, CreateSchemaSpecificSections },
                { MetadataRouteConstants.All, CreateSdkGenAllSection },
                { MetadataRouteConstants.Profiles, CreateProfileSection },
                { MetadataRouteConstants.Composites, CreateCompositeSection },
                { MetadataRouteConstants.ResourceTypes, CreateSwaggerUiSection }
            };

            foreach (var openApiContentProvider in openApiContentProviders)
            {
                var routeName = openApiContentProvider.RouteName;

                if (_openApiMetadataSectionByRoute.ContainsKey(routeName))
                {
                    throw new InvalidOperationException(
                              $"Duplicate metadata route '{routeName}' encountered during initialization.  Source: {openApiContentProvider.GetType().FullName}");
                }

                _openApiMetadataSectionByRoute.Add(routeName, openApiContentProvider.GetOpenApiContent);
            }

            _swaggerMetadataCache =
                new ConcurrentDictionary <string, OpenApiContent>(StringComparer.InvariantCultureIgnoreCase);
        }
        public OpenApiMetadataCacheProvider(IResourceModelProvider resourceModelProvider,
                                            IOpenApiMetadataRouteProvider openApiMetadataRouteProvider, IOpenApiContentProvider[] openApiContentProviders)
        {
            _openApiContentProviders = Preconditions.ThrowIfNull(openApiContentProviders, nameof(openApiContentProviders));
            _resourceModelProvider   = Preconditions.ThrowIfNull(resourceModelProvider, nameof(resourceModelProvider));

            _openApiMetadataRouteProvider = Preconditions.ThrowIfNull(
                openApiMetadataRouteProvider, nameof(openApiMetadataRouteProvider));

            _openApiMetadataResourceFilters =
                new Dictionary <string, IOpenApiMetadataResourceStrategy>(StringComparer.InvariantCultureIgnoreCase)
            {
                { Descriptors, new SwaggerUiDescriptorOnlyStrategy() },
                { Resources, new SwaggerUiResourceOnlyStrategy() },
                { All, new SdkGenAllResourceStrategy() }
            };

            _swaggerMetadataCache = new ConcurrentDictionary <string, OpenApiContent>(StringComparer.InvariantCultureIgnoreCase);
        }