/// <summary> /// Builds the IServiceProvider for the application and registers available services. /// </summary> private static void BuildAndRegisterServices() { IConfigurationRoot config = Program.Configuration; if (config == null) { throw new InvalidOperationException("Application Configuration is null. You must call BuildConfiguration() before calling this method."); } System.Console.WriteLine($"Connection string: {config["Data:ptvdb:ConnectionString"]}"); var srvcol = new ServiceCollection(); srvcol.AddLogging(); // register console apps db context srvcol.AddEntityFrameworkNpgsql().AddDbContext <SourceDbContext>(options => options.UseNpgsql(Program.Configuration[ConfigKeys.SourceConnectionString])); srvcol.AddDbContext <SourceDbContext>(options => options.UseNpgsql(Program.Configuration[ConfigKeys.SourceConnectionString])); // register ptv db context and PTV services RegisterServiceManager.RegisterFromAllAssemblies(srvcol); RegisterDataProviderServices.RegisterFromAssembly(srvcol); BaseEntityCloners.RegisterBaseEntityCloners(srvcol); FrameworksInitializer.RegisterEntityFramework(srvcol, Program.Configuration[ConfigKeys.PTVConnectionString]); // for now make it behave like this.. srvcol.AddTransient <ISourceRepository, SourceRepository>(); srvcol.AddTransient <IFakePtvRepository, FakePtvJsonFileRepository>(); srvcol.AddTransient <IHttpContextAccessor, FakeHttpContext>(); srvcol.AddTransient <IHostingEnvironment, FakeHostingEnv>(); srvcol.AddSingleton(new ApplicationConfiguration(config)); Program.ServiceProvider = srvcol.BuildServiceProvider(); }
/// <summary> /// Builds the IServiceProvider for the application and registers available services. /// </summary> private static void BuildAndRegisterServices() { IConfigurationRoot config = Configuration; if (config == null) { throw new InvalidOperationException("Application Configuration is null. You must call BuildConfiguration() before calling this method."); } Console.WriteLine($"Connection string: {config["Data:ptvdb:ConnectionString"]}"); var services = new ServiceCollection(); services.AddLogging(); // register ptv db context and PTV services RegisterServiceManager.RegisterFromAllAssemblies(services); FrameworksInitializer.RegisterEntityFramework(services, Configuration["Data:ptvdb:ConnectionString"]); services.Configure <AppSettings>(options => Configuration.GetSection("AppSettings").Bind(options)); services.AddSingleton <IConfiguration>(Configuration); services.AddOptions(); services.AddTransient <IDataHandler, DataHandler>(); services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>(); services.AddTransient <IUserIdentification, UserIdentification>(); //services.AddTransient<IOrganizationService, OrganizationService>(); //services.AddTransient<IServiceService, ServiceService>(); //services.AddTransient<IChannelService, ChannelService>(); //services.AddTransient<IGeneralDescriptionService, GeneralDescriptionService>(); services.AddSingleton(new ApplicationConfiguration(config)); ServiceProvider = services.BuildServiceProvider(); }
/// <summary> /// This method gets called by the runtime. Use this method to add services to the container. /// </summary> /// <param name="services">object responsible for registering of the assemblies</param> public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddMvcCore().AddJsonFormatters(); //services.AddMvcCore(); //services.AddAuthorization(); services.AddSingleton(PtvConfiguration); services.AddOptions(); services.AddSwaggerGen(c => { c.SwaggerDoc("ui", new Info() { Title = "PTV UI API", Version = "ui", Description = "PTV UI Web API", }); var developmentPath = string.Format(Path.Combine(appEnv.ContentRootPath, "bin", "Debug", "netcoreapp1.1")); var xmlCommentPath = Path.Combine(appEnv.ContentRootPath, @"PTV.Application.Api.xml"); var modelsXmlPath = Path.Combine(appEnv.ContentRootPath, @"PTV.Domain.Model.xml"); c.DescribeAllEnumsAsStrings(); if (!File.Exists(xmlCommentPath) || !File.Exists(modelsXmlPath)) { xmlCommentPath = Path.Combine(developmentPath, @"PTV.Application.Api.xml"); modelsXmlPath = Path.Combine(developmentPath, @"PTV.Domain.Model.xml"); } if (!File.Exists(xmlCommentPath) || !File.Exists(modelsXmlPath)) { return; } c.IncludeXmlComments(xmlCommentPath); c.IncludeXmlComments(modelsXmlPath); }); //services.AddCors(); services.Configure <CookieAuthenticationOptions>(options => Configuration.GetSection("Data:CookieAuthenticationConfigurations").Bind(options)); services.Configure <OpenIdConnectOptions>(options => Configuration.GetSection("Data:OpenIDConnectConfigurations").Bind(options)); //services.Configure<OAuthOptions>(options => Configuration.GetSection("Data:OpenIDConnectConfigurations").Bind(options)); services.Configure <IdentityServerAuthenticationOptions>(options => Configuration.GetSection("Data:IdentityServerAuthenticationConfigurations").Bind(options)); services.Configure <ProxyServerSettings>(options => Configuration.GetSection("Data:ProxyServerSettings").Bind(options)); services.Configure <DataContextOptions>(options => Configuration.GetSection("Data:DataContextOptions").Bind(options)); services.Configure <AnnotationServiceConfiguration>(options => Configuration.GetSection("Data:AnnotationService").Bind(options)); services.Configure <MapServiceConfiguration>(options => Configuration.GetSection("Data:MapService").Bind(options)); services.Configure <TestAccessUrlConfiguration>(options => Configuration.GetSection("Data:TestInternetAccess").Bind(options)); services.Configure <MapDNSes>(options => Configuration.GetSection("ApplicationConfiguration:MapDNSNames").Bind(options)); services.Configure <RequestFilterAppSetting>(options => Configuration.GetSection("RequestFilter").Bind(options)); services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>(); RegisterServiceManager.RegisterFromAllAssemblies(services); BaseEntityCloners.RegisterBaseEntityCloners(services); RegisterDataProviderServices.RegisterFromAssembly(services); // Add framework services. FrameworksInitializer.RegisterEntityFramework(services, Configuration["Data:DefaultConnection:ConnectionString"]); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddMvc().AddJsonOptions(i => i.SerializerSettings.Error += JsonError); services.AddWebpack(); services.AddSingleton(PtvConfiguration); services.AddOptions(); services.Configure <CookieAuthenticationOptions>(options => Configuration.GetSection("Data:CookieAuthenticationConfigurations").Bind(options)); services.Configure <OpenIdConnectOptions>(options => Configuration.GetSection("Data:OpenIDConnectConfigurations").Bind(options)); services.Configure <IdentityServerAuthenticationOptions>(options => Configuration.GetSection("Data:IdentityServerAuthenticationConfigurations").Bind(options)); services.Configure <ProxyServerSettings>(options => Configuration.GetSection("Data:ProxyServerSettings").Bind(options)); services.Configure <DataContextOptions>(options => Configuration.GetSection("Data:DataContextOptions").Bind(options)); services.Configure <AnnotationServiceConfiguration>(options => Configuration.GetSection("Data:AnnotationService").Bind(options)); services.Configure <MapServiceConfiguration>(options => Configuration.GetSection("Data:MapService").Bind(options)); services.Configure <MapDNSes>(options => Configuration.GetSection("ApplicationConfiguration:MapDNSNames").Bind(options)); services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>(); RegisterServiceManager.RegisterFromAllAssemblies(services); BaseEntityCloners.RegisterBaseEntityCloners(services); RegisterDataProviderServices.RegisterFromAssembly(services); FrameworksInitializer.RegisterEntityFramework(services, Configuration["Data:DefaultConnection:ConnectionString"]); }
/// <summary> /// Configure and register all services needed for application /// </summary> /// <param name="services"></param> // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddSingleton(PtvConfiguration); services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>(); services.AddSingleton(Configuration); RegisterServiceManager.RegisterFromAllAssemblies(services); RegisterDataProviderServices.RegisterFromAssembly(services); FrameworksInitializer.RegisterEntityFramework(services, Configuration.GetConnectionString("QuartzConnection")); // Add framework services. services.AddMvc().AddJsonOptions(options => { options.SerializerSettings.Formatting = Formatting.Indented; options.SerializerSettings.Culture = CultureInfo.InvariantCulture; options.SerializerSettings.DateFormatHandling = DateFormatHandling.IsoDateFormat; options.SerializerSettings.DateParseHandling = DateParseHandling.DateTime; options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc; options.SerializerSettings.NullValueHandling = NullValueHandling.Include; options.SerializerSettings.MissingMemberHandling = MissingMemberHandling.Ignore; options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); }); }
public static void ProcessMenuAction(ProgramMenuOption userMenuAction, ILogger logger) { Console.WriteLine($"Calling '{userMenuAction}'..."); switch (userMenuAction) { case ProgramMenuOption.InitialPtvCreate: Stopwatch sw = new Stopwatch(); Stopwatch swTotal = new Stopwatch(); swTotal.Start(); // create and apply migrations System.Console.WriteLine("Creating new database..."); sw.Start(); FrameworksInitializer.DoMigration(Program.ServiceProvider); sw.Stop(); string msg = $"Database created in {sw.Elapsed}."; System.Console.WriteLine(msg); logger.LogInformation(msg); System.Console.WriteLine(); // seed system data System.Console.WriteLine("Seeding system data to database.."); sw.Restart(); FrameworksInitializer.SeedDatabase(Program.ServiceProvider); sw.Stop(); msg = $"System data seeded to database in {sw.Elapsed}."; System.Console.WriteLine(msg); logger.LogInformation(msg); System.Console.WriteLine(); // Seed finto data System.Console.WriteLine("Seeding finto data.."); sw.Restart(); ImportFintoDataTask fintoTask = new ImportFintoDataTask(Program.ServiceProvider); fintoTask.ImportData(); sw.Stop(); System.Console.WriteLine(); msg = $"Finto items imported in {sw.Elapsed}."; System.Console.WriteLine(msg); logger.LogInformation(msg); System.Console.WriteLine(); // Seed digital authorizations System.Console.WriteLine("Seeding digital authorizations.."); sw.Restart(); var importDigitalAuthorizations = new DownloadAndImportDigitalAuthorizationsTask(ServiceProvider); importDigitalAuthorizations.ImportDigitalAuthorizations(); sw.Stop(); System.Console.WriteLine(); msg = $"Digital authorization items imported in {sw.Elapsed}."; System.Console.WriteLine(msg); logger.LogInformation(msg); System.Console.WriteLine(); // Create organizations for municipalities System.Console.WriteLine("Creating organizations for municipalities.."); sw.Restart(); CreateMunicipalityOrganizationsTask munOrgTask = new CreateMunicipalityOrganizationsTask(Program.ServiceProvider); munOrgTask.Create(); sw.Stop(); System.Console.WriteLine(); msg = $"Organizations for municipalities created in {sw.Elapsed}."; System.Console.WriteLine(msg); logger.LogInformation(msg); System.Console.WriteLine(); // import general descriptions System.Console.WriteLine("Importing general descriptions from JSON file.."); sw.Restart(); UpdateCreateGeneralDescriptionsTask generalDescriptionsTask = new UpdateCreateGeneralDescriptionsTask(ServiceProvider); generalDescriptionsTask.ImportDataFromJSON(); CreateServiceDataForGeneralDescriptionsJsonTask createServicesDescTask = new CreateServiceDataForGeneralDescriptionsJsonTask(Program.ServiceProvider); createServicesDescTask.ImportDataFromJSON(); sw.Stop(); System.Console.WriteLine(); msg = $"General descriptions imported in {sw.Elapsed}."; System.Console.WriteLine(msg); logger.LogInformation(msg); System.Console.WriteLine(); // import fake ptv data from json System.Console.WriteLine("Starting fake PTV import.."); sw.Restart(); ImportTask fakeit = new ImportTask(Program.ServiceProvider); fakeit.ImportFakePtv(); sw.Stop(); msg = $"Fake PTV import complete in {sw.Elapsed}."; System.Console.WriteLine(msg); logger.LogInformation(msg); System.Console.WriteLine(); var languagesAndVersionsTask = new UpdateLangaugeAvailabilitiesAndVersions(Program.ServiceProvider); languagesAndVersionsTask.CheckAndUpdateLangaugeAvailabilitiesAndVersions(); //Update text description to Json var updateTextDescriptionTask = new UpdateTextDescriptionToJsonTask(Program.ServiceProvider); updateTextDescriptionTask.CheckAndUpdateTextDescriptionToJson(); swTotal.Stop(); msg = $"Create, seed and import data, total time: {swTotal.Elapsed}"; System.Console.WriteLine(msg); logger.LogInformation(msg); System.Console.WriteLine(); System.Console.WriteLine("See log files in /logs subfolder for details."); break; case ProgramMenuOption.CreateOrMigrateDatabase: // create and apply migrations System.Console.WriteLine("Applying migrations..."); FrameworksInitializer.DoMigration(Program.ServiceProvider); System.Console.WriteLine("Database created."); break; case ProgramMenuOption.SeedSystemData: // seed system data System.Console.WriteLine("Seeding system data to database.."); FrameworksInitializer.SeedDatabase(Program.ServiceProvider); System.Console.WriteLine("System data seeded to database."); break; case ProgramMenuOption.DownloadGeneralDescription: // import general descriptions System.Console.WriteLine("Downloading general descriptions from DB to file.."); sw = new Stopwatch(); sw.Restart(); UpdateCreateGeneralDescriptionsTask downloadDescTask = new UpdateCreateGeneralDescriptionsTask(Program.ServiceProvider); downloadDescTask.DownloadFromDatabase(); sw.Stop(); System.Console.WriteLine(); msg = $"General descriptions downloaded in {sw.Elapsed}."; System.Console.WriteLine(msg); logger.LogInformation(msg); System.Console.WriteLine(); break; case ProgramMenuOption.UpdateGeneralDescription: // import general descriptions System.Console.WriteLine("Importing general descriptions from JSON file.."); sw = new Stopwatch(); sw.Restart(); UpdateCreateGeneralDescriptionsTask updateDescTask = new UpdateCreateGeneralDescriptionsTask(Program.ServiceProvider); updateDescTask.ImportDataFromJSON(); sw.Stop(); System.Console.WriteLine(); msg = $"General descriptions imported in {sw.Elapsed}."; System.Console.WriteLine(msg); logger.LogInformation(msg); System.Console.WriteLine(); break; case ProgramMenuOption.CreateMunicipalityOrganizations: System.Console.WriteLine("Creating Organizations for Municipalities."); CreateMunicipalityOrganizationsTask municipalityOrganizationsTask = new CreateMunicipalityOrganizationsTask(Program.ServiceProvider); municipalityOrganizationsTask.Create(); break; //case ProgramMenuOption.ImportGeneralDescriptions: // System.Console.WriteLine("Generating general descriptions JSON..."); // CreateGeneralDescriptionsJsonTask generalDescriptionTask = new CreateGeneralDescriptionsJsonTask(Program.ServiceProvider); // generalDescriptionTask.Generate(); // System.Console.WriteLine("General descriptions JSON generation complete."); // break; //case ProgramMenuOption.ImportFakePtv: // System.Console.WriteLine("Starting fake PTV import.."); // ImportTask it = new ImportTask(Program.ServiceProvider); // it.ImportFakePtv(); // System.Console.WriteLine("Fake PTV import complete."); // break; case ProgramMenuOption.DumpFakePtv: System.Console.WriteLine("Starting to dump fake PTV to JSON files.."); DumpFakePtvToFilesTask task = new DumpFakePtvToFilesTask(Program.ServiceProvider); task.WriteToFiles(); System.Console.WriteLine("Fake PTV dumped to JSON files."); break; case ProgramMenuOption.ValidateFakePtvJson: System.Console.WriteLine("Starting to validate fake PTV generated JSON files to model.."); try { DumpFakePtvToFilesTask validationTask = new DumpFakePtvToFilesTask(Program.ServiceProvider); validationTask.ValidateJson(); System.Console.WriteLine("Validation success."); } catch (Exception ex) { System.Console.WriteLine(ex.ToString()); System.Console.BackgroundColor = ConsoleColor.Red; System.Console.Write("Error:"); System.Console.ResetColor(); System.Console.WriteLine($" check the SourceXXX model, {ex.Message}"); } break; case ProgramMenuOption.CreatePostalCodesJson: System.Console.WriteLine("Generating postal codes JSON.."); CreatePostalCodesJsonTask pct = new CreatePostalCodesJsonTask(Program.ServiceProvider); pct.Generate(); System.Console.WriteLine("Postal codes JSON generation complete."); break; case ProgramMenuOption.ImportOrganizations: System.Console.WriteLine("Importing organizations JSON.."); CreateOrganizationsJsonTask organizationTask = new CreateOrganizationsJsonTask(Program.ServiceProvider); organizationTask.ImportDataFromJSON(); System.Console.WriteLine("Importing organizations complete."); break; case ProgramMenuOption.UpdateCoordinatesForAddress: System.Console.WriteLine("Updating addresses.."); var addressTask = new UpdateCoordinatesForAddressesTask(Program.ServiceProvider); addressTask.UpdateAddresses(); System.Console.WriteLine("Updating addresses complete."); break; case ProgramMenuOption.ImportOrUpdateFinto: System.Console.WriteLine("Importing finto data.."); var fintoUpdateTask = new ImportFintoDataTask(Program.ServiceProvider); fintoUpdateTask.ImportData(); System.Console.WriteLine("Importing finto data complete."); break; case ProgramMenuOption.DownloadFinto: System.Console.WriteLine("Importing finto data.."); var downloadFintoTask = new DownloadFintoDataTask(); downloadFintoTask.GetAllFintoData(); System.Console.WriteLine("Importing finto data complete."); break; // case ProgramMenuOption.SwitchCoordinates: // System.Console.WriteLine("Switching coordinates.."); // var addressSwitchTask = new UpdateCoordinatesForAddressesTask(Program.ServiceProvider); // addressSwitchTask.SwitchCoordinates(); // System.Console.WriteLine("Switching coordinates complete."); // break; case ProgramMenuOption.UpdateLanguageAvailabilitiesAndVersions: var languagesAndVersions = new UpdateLangaugeAvailabilitiesAndVersions(Program.ServiceProvider); languagesAndVersions.CheckAndUpdateLangaugeAvailabilitiesAndVersions(); break; case ProgramMenuOption.UpdateTextDescription: var updateTextDescription = new UpdateTextDescriptionToJsonTask(Program.ServiceProvider); updateTextDescription.CheckAndUpdateTextDescriptionToJson(); break; case ProgramMenuOption.UpdateServiceDescriptionByGeneralDescription: Console.WriteLine($"Update operation can take few minutes..."); var updateBackgroundGeneralDescription = new UpdateServiceDescriptionByGeneralDescriptionTask(Program.ServiceProvider); updateBackgroundGeneralDescription.CheckAndUpdateServiceDescriptionByGeneralDescription(); Console.WriteLine("Update operation is complete."); break; case ProgramMenuOption.FindCyclicOrganizations: var findCylicOrganizationsTask = new FindCyclicOrganizationsTask(Program.ServiceProvider); findCylicOrganizationsTask.FindCyclicOrganizations(); break; case ProgramMenuOption.DeleteOldData: var deleteOldDataTask = new DeleteOldDataTask(Program.ServiceProvider); deleteOldDataTask.DeleteOldData(); break; case ProgramMenuOption.DownloadAndImportDigitalAuthorizations: var digitalAuthorizationsTask = new DownloadAndImportDigitalAuthorizationsTask(ServiceProvider); digitalAuthorizationsTask.DownloadAndImportDigitalAuthorizations(); break; case ProgramMenuOption.FixFintoMerge: var fixFintoTask = new FixFintoTask(ServiceProvider); fixFintoTask.Apply(); break; case ProgramMenuOption.DownloadPostalCodesFromCodeServiceTask: DownloadPostalCodesFromCodeServiceTask dpcTask = new DownloadPostalCodesFromCodeServiceTask(ServiceProvider); dpcTask.Download(); break; case ProgramMenuOption.FixMultiPublishedEntities: FixMultiplePublishedEntitiesTask fixMultipleTask = new FixMultiplePublishedEntitiesTask(ServiceProvider); fixMultipleTask.Apply(); break; // case ProgramMenuOption.PrintGDwithoutLaw: // PrintGdWithoutLaw printGd = new PrintGdWithoutLaw(ServiceProvider); // printGd.Apply(); // break; case ProgramMenuOption.CopyLawsFromArchivedToPublishedGeneralDescs: CopyLawsOfGeneralDescs copyLaws = new CopyLawsOfGeneralDescs(ServiceProvider); copyLaws.Apply(); break; // case ProgramMenuOption.PrintMissingGDSWELaws: // CopyLawsOfGeneralDescs copyLaws2 = new CopyLawsOfGeneralDescs(ServiceProvider); // copyLaws2.PrintMissingSweLaws(); // break; default: break; } }
/// <summary> /// Configure and register all services needed for application /// </summary> /// <param name="services"></param> // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddMvc( c => c.Conventions.Add(new ControllerModelRemoveVersionPrefixConvention()) ); services.AddMvcCore().AddJsonFormatters(); services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>(); services.AddSingleton <IConfigurationRoot>(Configuration); services.Configure <AppSettings>(options => Configuration.GetSection("AppSettings").Bind(options)); services.AddSingleton(PtvConfiguration); services.Configure <CookieAuthenticationOptions>(options => Configuration.GetSection("Data:CookieAuthenticationConfigurations").Bind(options)); services.Configure <OpenIdConnectOptions>(options => Configuration.GetSection("Data:OpenIDConnectConfigurations").Bind(options)); services.Configure <IdentityServerAuthenticationOptions>(options => Configuration.GetSection("Data:IdentityServerAuthenticationConfigurations").Bind(options)); services.Configure <ProxyServerSettings>(options => Configuration.GetSection("Data:ProxyServerSettings").Bind(options)); services.Configure <DataContextOptions>(options => Configuration.GetSection("Data:DataContextOptions").Bind(options)); services.Configure <AnnotationServiceConfiguration>(options => Configuration.GetSection("Data:AnnotationService").Bind(options)); services.Configure <MapServiceConfiguration>(options => Configuration.GetSection("Data:MapService").Bind(options)); services.Configure <TestAccessUrlConfiguration>(options => Configuration.GetSection("Data:TestInternetAccess").Bind(options)); services.Configure <MapDNSes>(options => Configuration.GetSection("ApplicationConfiguration:MapDNSNames").Bind(options)); services.Configure <RequestFilterAppSetting>(options => Configuration.GetSection("RequestFilter").Bind(options)); services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>(); RegisterServiceManager.RegisterFromAllAssemblies(services); BaseEntityCloners.RegisterBaseEntityCloners(services); RegisterDataProviderServices.RegisterFromAssembly(services); FrameworksInitializer.RegisterEntityFramework(services, Configuration["Data:DefaultConnection:ConnectionString"]); services.AddSwaggerGen( c => { c.SwaggerDoc("v4", new Info { Version = "v4", Title = "PTV Open Api version 4", Description = "Here you can see listed all the PTV Open Api methods." }); c.SwaggerDoc("v5", new Info { Version = "v5", Title = "PTV Open Api version 5", Description = "Here you can see listed all the PTV Open Api methods." }); c.SwaggerDoc("v6", new Info { Version = "v6", Title = "PTV Open Api version 6", Description = "Here you can see listed all the PTV Open Api methods." }); c.SwaggerDoc("v7", new Info { Version = "v7", Title = "PTV Open Api version 7", Description = "Here you can see listed all the PTV Open Api methods." }); c.OperationFilter <SecurityRequirementsOperationFilter>(); c.DocInclusionPredicate((version, apiDescription) => ResolveVersionSupportByRouteConstraint(apiDescription, version)); c.SchemaFilter <SwaggerSchemaFilter>(); // TODO: PTV-1556: //c.DocumentFilter<SwaggerDocumentFilter>(); // Define the OAuth2.0 scheme that's in use (i.e. Implicit Flow) c.AddSecurityDefinition("oauth2", new OAuth2Scheme { Type = "oauth2", Flow = "implicit", AuthorizationUrl = $"{Configuration["STS"]}/connect/authorize", Scopes = new Dictionary <string, string> { { "dataEventRecords", "Access event records" } } }); }); var path = appEnv.IsDevelopment() ? Path.Combine(appEnv.ContentRootPath, "bin", "Debug", @"netcoreapp1.1") : appEnv.ContentRootPath; var xmlCommentPath = Path.Combine(path, @"PTV.Application.OpenApi.xml"); var modelsXmlPath = Path.Combine(path, @"PTV.Domain.Model.xml"); services.ConfigureSwaggerGen(options => { options.DescribeAllEnumsAsStrings(); options.IncludeXmlComments(xmlCommentPath); if (File.Exists(modelsXmlPath)) { options.IncludeXmlComments(modelsXmlPath); } }); }