-
-
Notifications
You must be signed in to change notification settings - Fork 751
Expand file tree
/
Copy pathApplicationBuilderExtensions.cs
More file actions
123 lines (106 loc) · 4.46 KB
/
ApplicationBuilderExtensions.cs
File metadata and controls
123 lines (106 loc) · 4.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
using System.Globalization;
using System. Linq;
using BlazorHero.CleanArchitecture.Application.Interfaces.Services;
using BlazorHero.CleanArchitecture.Server.Hubs;
using BlazorHero.CleanArchitecture.Server.Middlewares;
using BlazorHero.CleanArchitecture.Shared.Constants.Localization;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Localization;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using BlazorHero.CleanArchitecture.Shared.Constants.Application;
using BlazorHero.CleanArchitecture.Application.Configurations;
using Microsoft.Extensions.Configuration;
using BlazorHero.CleanArchitecture.Infrastructure.Contexts;
using Microsoft.EntityFrameworkCore;
using System;
using Microsoft.Extensions.Logging;
namespace BlazorHero.CleanArchitecture.Server.Extensions
{
internal static class ApplicationBuilderExtensions
{
internal static IApplicationBuilder UseExceptionHandling(
this IApplicationBuilder app,
IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseWebAssemblyDebugging();
}
return app;
}
internal static IApplicationBuilder UseForwarding(this IApplicationBuilder app, IConfiguration configuration)
{
AppConfiguration config = GetApplicationSettings(configuration);
if (config.BehindSSLProxy)
{
app.UseCors();
app.UseForwardedHeaders();
}
return app;
}
internal static void ConfigureSwagger(this IApplicationBuilder app)
{
app.UseSwagger();
app.UseSwaggerUI(options =>
{
options.SwaggerEndpoint("/swagger/v1/swagger.json", typeof(Program).Assembly.GetName().Name);
options.RoutePrefix = "swagger";
options.DisplayRequestDuration();
});
}
internal static IApplicationBuilder UseEndpoints(this IApplicationBuilder app)
=> app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapControllers();
endpoints.MapFallbackToFile("index.html");
endpoints.MapHub<SignalRHub>(ApplicationConstants.SignalR.HubUrl);
});
internal static IApplicationBuilder UseRequestLocalizationByCulture(this IApplicationBuilder app)
{
var supportedCultures = LocalizationConstants.SupportedLanguages.Select(l => new CultureInfo(l.Code)).ToArray();
app.UseRequestLocalization(options =>
{
options.SupportedUICultures = supportedCultures;
options.SupportedCultures = supportedCultures;
options.DefaultRequestCulture = new RequestCulture(supportedCultures.First());
options.ApplyCurrentCultureToResponseHeaders = true;
});
app.UseMiddleware<RequestCultureMiddleware>();
return app;
}
internal static IApplicationBuilder Initialize(this IApplicationBuilder app, Microsoft.Extensions.Configuration.IConfiguration _configuration)
{
using var serviceScope = app.ApplicationServices.CreateScope();
var services = serviceScope.ServiceProvider;
try
{
var context = services.GetRequiredService<BlazorHeroContext>();
if (context.Database.IsSqlServer())
{
context.Database.Migrate();
}
}
catch (Exception ex)
{
var logger = serviceScope.ServiceProvider.GetRequiredService<ILogger<Program>>();
logger.LogError(ex, "An error occurred while migrating or seeding the database.");
throw;
}
var initializers = serviceScope.ServiceProvider.GetServices<IDatabaseSeeder>();
foreach (var initializer in initializers)
{
initializer.Initialize();
}
return app;
}
private static AppConfiguration GetApplicationSettings(IConfiguration configuration)
{
var applicationSettingsConfiguration = configuration.GetSection(nameof(AppConfiguration));
return applicationSettingsConfiguration.Get<AppConfiguration>();
}
}
}