1111using Microsoft . Extensions . DependencyInjection ;
1212using Microsoft . Extensions . Hosting ;
1313using Microsoft . Extensions . Logging ;
14+ using Microsoft . OpenApi . Models ;
1415using Serilog ;
1516using Serilog . Events ;
1617using Thinktecture . AspNetCore . ModelBinding ;
18+ using Thinktecture . Controllers ;
1719using Thinktecture . Helpers ;
1820using Thinktecture . SmartEnums ;
21+ using Thinktecture . Swashbuckle ;
1922using Thinktecture . Text . Json . Serialization ;
2023using Thinktecture . Unions ;
2124using Thinktecture . Validation ;
@@ -40,7 +43,7 @@ public static async Task Main()
4043
4144 await DoHttpRequestsAsync ( loggerFactory . CreateLogger < Program > ( ) , startMinimalWebApi ) ;
4245
43- await Task . Delay ( 5000 ) ;
46+ await Task . Delay ( 60000 ) ;
4447 }
4548
4649 private static async Task DoHttpRequestsAsync ( ILogger logger , bool forMinimalWebApi )
@@ -118,23 +121,32 @@ private static async Task DoRequestAsync(ILogger logger, HttpClient client, stri
118121 private static Task StartServerAsync ( ILoggerFactory loggerFactory )
119122 {
120123 var webHost = new HostBuilder ( )
124+ . ConfigureServices ( services =>
125+ {
126+ services . AddSingleton ( loggerFactory )
127+ . AddSingleton < EmailNotificationSender > ( )
128+ . AddSingleton < SmsNotificationSender > ( ) ;
129+ services . AddMvc ( options => options . ModelBinderProviders . Insert ( 0 , new ThinktectureModelBinderProvider ( ) ) )
130+ . AddJsonOptions ( options => options . JsonSerializerOptions . Converters . Add ( new ThinktectureJsonConverterFactory ( ) ) )
131+ . AddApplicationPart ( typeof ( DemoController ) . Assembly ) ;
132+
133+ services . AddEndpointsApiExplorer ( )
134+ . AddSwaggerGen ( options => options . SwaggerDoc ( "demo" , new OpenApiInfo { Title = "Demo API" , Version = "v1" } ) )
135+ . AddThinktectureOpenApiFilters ( options => options . SmartEnumSchemaExtension = SmartEnumSchemaExtension . VarNamesFromStringRepresentation ) ;
136+ } )
121137 . ConfigureWebHostDefaults ( builder =>
122138 {
123139 builder . UseKestrel ( )
124140 . Configure ( app =>
125141 {
126142 app . UseRouting ( ) ;
127- app . UseEndpoints ( endpoints => endpoints . MapControllers ( ) ) ;
143+ app . UseEndpoints ( endpoints =>
144+ {
145+ endpoints . MapSwagger ( ) ;
146+ endpoints . MapControllers ( ) ;
147+ } ) ;
128148 } ) ;
129149 } )
130- . ConfigureServices ( collection =>
131- {
132- collection . AddSingleton ( loggerFactory )
133- . AddSingleton < EmailNotificationSender > ( )
134- . AddSingleton < SmsNotificationSender > ( ) ;
135- collection . AddControllers ( options => options . ModelBinderProviders . Insert ( 0 , new ThinktectureModelBinderProvider ( ) ) )
136- . AddJsonOptions ( options => options . JsonSerializerOptions . Converters . Add ( new ThinktectureJsonConverterFactory ( ) ) ) ;
137- } )
138150 . Build ( ) ;
139151
140152 return webHost . StartAsync ( ) ;
@@ -150,7 +162,10 @@ private static Task StartMinimalWebApiAsync(ILoggerFactory loggerFactory)
150162 . ConfigureHttpJsonOptions ( options =>
151163 {
152164 options . SerializerOptions . Converters . Add ( new ThinktectureJsonConverterFactory ( ) ) ;
153- } ) ;
165+ } )
166+ . AddEndpointsApiExplorer ( )
167+ . AddSwaggerGen ( options => options . SwaggerDoc ( "demo" , new OpenApiInfo { Title = "Demo API" , Version = "v1" } ) )
168+ . AddThinktectureOpenApiFilters ( options => options . SmartEnumSchemaExtension = SmartEnumSchemaExtension . VarNamesFromStringRepresentation ) ;
154169
155170 var app = builder . Build ( ) ;
156171
0 commit comments