public static void Init(TestContext testContext)
        {
            var options = new SwaggerGeneratorSettings();

            options.DocInclusionPredicate = (version, api) => true;
            options.OperationFilters.Add(new RemoveReadOnlyFromUriParametersOperationFilter());
            options.OperationFilters.Add(new RemoveBindNoneFromUriParametersOperationFilter());
            options.OperationFilters.Add(new AddAsObjectAnnotationOperationFilter());
            options.OperationFilters.Add(new HandleGridViewDataSetReturnType());
            options.SwaggerDocs.Add("v1", new Info()
            {
                Title = "Test API", Version = "v1"
            });

            var serviceCollection = new ServiceCollection()
                                    .AddSingleton <ObjectPoolProvider, DefaultObjectPoolProvider>()
                                    .AddSingleton <IHostingEnvironment, HostingEnvironment>()
                                    .AddLogging();

            serviceCollection.AddMvc(setup => {
                setup.Conventions.Add(new ApiExplorerVisibilityEnabledConvention());
            })
            .AddApplicationPart(typeof(CompaniesController).Assembly);

            var serviceProvider = serviceCollection.BuildServiceProvider();

            var apiDescriptionGroupCollectionProvider = serviceProvider.GetService <IApiDescriptionGroupCollectionProvider>();

            var schemaRegistryFactory = new SchemaRegistryFactory(new JsonSerializerSettings(), new SchemaRegistrySettings());
            var generator             = new SwaggerGenerator(apiDescriptionGroupCollectionProvider, schemaRegistryFactory, options);

            document = generator.GetSwagger("v1");
        }
Beispiel #2
0
        internal ISwaggerProvider CreateSwaggerProvider(IServiceProvider serviceProvider)
        {
            var swaggerGeneratorSettings = CreateSwaggerGeneratorSettings(serviceProvider);
            var schemaRegistrySettings   = CreateSchemaRegistrySettings(serviceProvider);

            // Instantiate & add the XML comments filters here so they're executed before any custom
            // filters AND so they can share the same XPathDocument (perf. optimization)
            foreach (var xmlDocFactory in _xmlDocFactories)
            {
                var xmlDoc = xmlDocFactory();
                swaggerGeneratorSettings.OperationFilters.Insert(0, new XmlCommentsOperationFilter(xmlDoc));
                schemaRegistrySettings.SchemaFilters.Insert(0, new XmlCommentsSchemaFilter(xmlDoc));
            }

            var schemaRegistryFactory = new SchemaRegistryFactory(
                serviceProvider.GetRequiredService <IOptions <MvcJsonOptions> >().Value.SerializerSettings,
                schemaRegistrySettings
                );

            return(new SwaggerGenerator(
                       serviceProvider.GetRequiredService <IApiDescriptionGroupCollectionProvider>(),
                       schemaRegistryFactory,
                       swaggerGeneratorSettings
                       ));
        }
        public SwaggerDocument GetSwagger(string documentName, string host = null, string basePath = null, string[] schemes = null)
        {
            var metadatas = _serviceProvider.GetService <MicroServiceMetadatas>();

            SchemaRegistryFactory schemaRegistryFactory = new SchemaRegistryFactory(new JsonSerializerSettings(), new SchemaRegistrySettings());

            _schemaRegistry = schemaRegistryFactory.Create();
            IDictionary <string, PathItem> paths = metadatas.RouteActionMetadatas
                                                   .GroupBy(m => m.RelativePath)
                                                   .ToDictionary(m => "/" + m.First().RelativePath, m =>
                                                                 new PathItem
            {
                Get    = CreateOperation(m, HttpMethods.Get),
                Post   = CreateOperation(m, HttpMethods.Post),
                Put    = CreateOperation(m, HttpMethods.Put),
                Delete = CreateOperation(m, HttpMethods.Delete)
            });
            var swaggerDoc = new SwaggerDocument
            {
                Info                = new Info(),
                Host                = host,
                BasePath            = basePath,
                Schemes             = schemes,
                Paths               = paths,
                Definitions         = _schemaRegistry.Definitions,
                SecurityDefinitions = null,
                Security            = null
            };

            return(swaggerDoc);
        }
Beispiel #4
0
        public static void Init(TestContext testContext)
        {
            var knownTypesOptions = Options.Create(new DotvvmApiOptions());

            knownTypesOptions.Value.AddKnownType(typeof(Company <string>));

            var options = new SwaggerGeneratorOptions
            {
                DocInclusionPredicate = (version, api) => true,
                OperationFilters      =
                {
                    new RemoveReadOnlyFromUriParametersOperationFilter(),
                    new RemoveBindNoneFromUriParametersOperationFilter(),
                    new AddAsObjectOperationFilter(knownTypesOptions)
                },
                DocumentFilters =
                {
                    new HandleKnownTypesDocumentFilter(knownTypesOptions)
                },
                SwaggerDocs =
                {
                    { "v1", new Info()
                        {
                            Title = "Test API", Version = "v1"
                        } }
                }
            };

            var serviceCollection = new ServiceCollection()
                                    .AddSingleton <ObjectPoolProvider, DefaultObjectPoolProvider>()
                                    .AddSingleton <IHostingEnvironment, HostingEnvironment>()
                                    .AddSingleton <DiagnosticSource>(p => new DiagnosticListener("test"))
                                    .AddLogging();

            serviceCollection.AddMvc(setup => setup.Conventions.Add(new ApiExplorerVisibilityEnabledConvention()))
            .AddApplicationPart(typeof(CompaniesController).Assembly);

            var serviceProvider = serviceCollection.BuildServiceProvider();
            var apiDescriptionGroupCollectionProvider = serviceProvider.GetRequiredService <IApiDescriptionGroupCollectionProvider>();

            var schemaSettings = new SchemaRegistryOptions()
            {
                SchemaFilters =
                {
                    new AddTypeToModelSchemaFilter()
                }
            };

            var schemaRegistryFactory = new SchemaRegistryFactory(new JsonSerializerSettings(), schemaSettings);
            var generator             = new SwaggerGenerator(apiDescriptionGroupCollectionProvider, schemaRegistryFactory, options);

            document = generator.GetSwagger("v1");
        }
Beispiel #5
0
        private static ISwaggerProvider CreateSwaggerProvider(IServiceProvider serviceProvider)
        {
            var swaggerGenOptions       = serviceProvider.GetRequiredService <IOptions <SwaggerGenOptions> >().Value;
            var mvcJsonOptions          = serviceProvider.GetRequiredService <IOptions <MvcJsonOptions> >().Value;
            var apiDescriptionsProvider = serviceProvider.GetRequiredService <IApiDescriptionGroupCollectionProvider>();

            var schemaRegistryFactory = new SchemaRegistryFactory(
                mvcJsonOptions.SerializerSettings,
                swaggerGenOptions.GetSchemaRegistryOptions(serviceProvider)
                );

            return(new SwaggerProvider(
                       apiDescriptionsProvider,
                       schemaRegistryFactory,
                       swaggerGenOptions.GetSwaggerProviderOptions(serviceProvider)
                       ));
        }