namespace Lion.AbpPro.NotificationManagement;
[DependsOn(
typeof(NotificationManagementApplicationModule),
typeof(NotificationManagementEntityFrameworkCoreModule),
typeof(NotificationManagementHttpApiModule),
typeof(AbpAutofacModule),
typeof(AbpCachingStackExchangeRedisModule),
typeof(AbpAspNetCoreSerilogModule),
typeof(AbpSwashbuckleModule),
typeof(AbpProCapModule),
typeof(AbpEntityFrameworkCoreMySQLModule)
)]
public class NotificationManagementHttpApiHostModule : AbpModule
{
private const string DefaultCorsPolicyName = "Default";
public override void ConfigureServices(ServiceConfigurationContext context)
{
ConfigureVirtualFileSystem();
ConfigureSwaggerServices(context);
ConfigAntiForgery();
ConfigureLocalization();
ConfigureCache(context);
ConfigureCors(context);
ConfigDB();
}
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
var app = context.GetApplicationBuilder();
var env = context.GetEnvironment();
app.UseCorrelationId();
app.UseStaticFiles();
app.UseRouting();
app.UseCors(DefaultCorsPolicyName);
app.UseAuthentication();
app.UseAbpRequestLocalization();
app.UseAuthorization();
app.UseSwagger();
app.UseAbpSwaggerUI(options =>
{
options.SwaggerEndpoint("/swagger/v1/swagger.json", "NotificationManagement API");
options.DocExpansion(DocExpansion.None);
options.DefaultModelExpandDepth(-2);
});
app.UseAuditing();
app.UseAbpSerilogEnrichers();
app.UseConfiguredEndpoints();
}
///
/// 配置虚拟文件系统
///
private void ConfigureVirtualFileSystem()
{
Configure(options => { options.FileSets.AddEmbedded(); });
}
private void ConfigDB()
{
Configure(options =>
{
/* The main point to change your DBMS.
* See also OperationsMigrationsDbContextFactory for EF Core tooling. */
options.UseMySQL();
});
}
///
/// 配置SwaggerUI
///
///
private static void ConfigureSwaggerServices(ServiceConfigurationContext context)
{
context.Services.AddSwaggerGen(
options =>
{
options.SwaggerDoc("v1", new OpenApiInfo { Title = "NotificationManagement API", Version = "v1" });
options.DocInclusionPredicate((docName, description) => true);
#region 多语言
options.AddSecurityDefinition("ApiKey", new OpenApiSecurityScheme
{
Type = SecuritySchemeType.ApiKey,
In = ParameterLocation.Header,
Name = "Accept-Language",
Description = "多语言"
});
options.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "ApiKey" }
},
new string[] { }
}
});
#endregion
});
}
private void ConfigAntiForgery()
{
Configure(options => { options.AutoValidate = false; });
}
///
/// 配置本地化
///
private void ConfigureLocalization()
{
Configure(options =>
{
options.Languages.Add(new LanguageInfo("ar", "ar", "العربية"));
options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština"));
options.Languages.Add(new LanguageInfo("en", "en", "English"));
options.Languages.Add(new LanguageInfo("en-GB", "en-GB", "English (UK)"));
options.Languages.Add(new LanguageInfo("fi", "fi", "Finnish"));
options.Languages.Add(new LanguageInfo("fr", "fr", "Français"));
options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar"));
options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português"));
options.Languages.Add(new LanguageInfo("ro-RO", "ro-RO", "Română"));
options.Languages.Add(new LanguageInfo("ru", "ru", "Русский"));
options.Languages.Add(new LanguageInfo("sk", "sk", "Slovak"));
options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe"));
options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文"));
options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文"));
options.Languages.Add(new LanguageInfo("de-DE", "de-DE", "Deutsch"));
options.Languages.Add(new LanguageInfo("es", "es", "Español"));
});
}
///
/// Redis缓存
///
///
private void ConfigureCache(ServiceConfigurationContext context)
{
Configure(options =>
{
options.KeyPrefix = "NotificationManagement:";
options.GlobalCacheEntryOptions = new DistributedCacheEntryOptions
{
// 全局缓存有效时间
AbsoluteExpiration = DateTimeOffset.UtcNow.AddHours(2)
};
});
var configuration = context.Services.GetConfiguration();
var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]);
context.Services
.AddDataProtection()
.PersistKeysToStackExchangeRedis(redis, "YH.Wms.Operations-Keys");
}
///
/// 配置跨域
///
private void ConfigureCors(ServiceConfigurationContext context)
{
var configuration = context.Services.GetConfiguration();
context.Services.AddCors(options =>
{
options.AddPolicy(DefaultCorsPolicyName, builder =>
{
builder
.WithOrigins(
configuration["App:CorsOrigins"]
.Split(",", StringSplitOptions.RemoveEmptyEntries)
.Select(o => o.RemovePostFix("/"))
.ToArray()
)
.WithAbpExposedHeaders()
.SetIsOriginAllowedToAllowWildcardSubdomains()
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials();
});
});
}
}