added default infrastructure extension

master
Young 6 months ago
parent c53d6f0a5d
commit f4b16bd7a3

@ -7,8 +7,10 @@ using Infrastructure.Options;
using Infrastructure.Repository; using Infrastructure.Repository;
using Infrastructure.Repository.Mongo; using Infrastructure.Repository.Mongo;
using Infrastructure.Repository.Redis; using Infrastructure.Repository.Redis;
using Infrastructure.Seed;
using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using MongoDB.Driver; using MongoDB.Driver;
using Newtonsoft.Json; using Newtonsoft.Json;
@ -24,6 +26,29 @@ namespace Infrastructure.Extensions;
public static class ServiceCollectionExtensions public static class ServiceCollectionExtensions
{ {
public static WebApplicationBuilder AddDefaultInfrastructure<T>(this WebApplicationBuilder builder)
where T : IEquatable<T>
{
ArgumentNullException.ThrowIfNull(builder);
var services = builder.Services;
var configuration = builder.Configuration;
services.AddDefaultUserContext<T>()
.AddDefaultAesEncryption()
.AddDefaultAuthentication(configuration)
.AddDefaultAuthorize(configuration)
.AddDefaultControllers()
.AddDefaultCors(configuration)
.AddDefaultApiVersioning(configuration)
.AddDefaultRedis(configuration)
.AddDefaultSerilog(configuration)
.AddDefaultRepositoryContext()
.AddDefaultSqlSugar(configuration, builder.Environment)
.AddDefaultMongoDb(configuration)
.AddDefaultTokenContext()
.AddDefaultDatabaseSeed();
return builder;
}
public static TOptions? GetOptions<TOptions>(this IConfiguration configuration, string sectionName) public static TOptions? GetOptions<TOptions>(this IConfiguration configuration, string sectionName)
where TOptions : OptionsBase where TOptions : OptionsBase
{ {
@ -222,7 +247,7 @@ public static class ServiceCollectionExtensions
/// </summary> /// </summary>
/// <param name="services"></param> /// <param name="services"></param>
/// <returns></returns> /// <returns></returns>
public static IServiceCollection AddAesEncryption(this IServiceCollection services) public static IServiceCollection AddDefaultAesEncryption(this IServiceCollection services)
{ {
ArgumentNullException.ThrowIfNull(services); ArgumentNullException.ThrowIfNull(services);
services.TryAddSingleton<IEncryptionService, EncryptionService>(); services.TryAddSingleton<IEncryptionService, EncryptionService>();
@ -235,7 +260,7 @@ public static class ServiceCollectionExtensions
/// <param name="services"></param> /// <param name="services"></param>
/// <param name="configuration"></param> /// <param name="configuration"></param>
/// <returns></returns> /// <returns></returns>
public static IServiceCollection AddMongoDbSetup( public static IServiceCollection AddDefaultMongoDb(
this IServiceCollection services, this IServiceCollection services,
IConfiguration configuration) IConfiguration configuration)
{ {
@ -276,10 +301,13 @@ public static class ServiceCollectionExtensions
/// <param name="configuration"></param> /// <param name="configuration"></param>
/// <param name="hostEnvironment"></param> /// <param name="hostEnvironment"></param>
/// <returns></returns> /// <returns></returns>
public static IServiceCollection AddDefaultSqlSugarSetup( public static IServiceCollection AddDefaultSqlSugar(
this IServiceCollection services, this IServiceCollection services,
IConfiguration configuration, IConfiguration configuration,
IWebHostEnvironment hostEnvironment) IWebHostEnvironment hostEnvironment,
Action<object, DataFilterModel>? onDataChanging = null,
Action<DiffLogModel>? onDiffLogEvent = null
)
{ {
ArgumentNullException.ThrowIfNull(services); ArgumentNullException.ThrowIfNull(services);
@ -330,13 +358,20 @@ public static class ServiceCollectionExtensions
} }
}; };
var sugarScope = new SqlSugarScope(connectionConfig, config => var sugarScope = new SqlSugarScope(connectionConfig, client =>
{ {
config.QueryFilter.AddTableFilter<IDeletable>(d => !d.IsDeleted); client.QueryFilter.AddTableFilter<IDeletable>(d => !d.IsDeleted);
if (hostEnvironment.IsDevelopment() || hostEnvironment.IsStaging()) if (hostEnvironment.IsDevelopment() || hostEnvironment.IsStaging())
{ {
config.Aop.OnLogExecuting = (sql, parameters) => { Log.Logger.Information(sql); }; client.Aop.OnLogExecuted = (sql, parameters) =>
{
var elapsed = client.Ado.SqlExecutionTime.TotalSeconds;
Log.Logger.Information("sql: {sql} elapsed: {time} seconds", sql, elapsed);
};
} }
client.Aop.DataExecuting = onDataChanging;
client.Aop.OnDiffLogEvent = onDiffLogEvent;
}); });
services.AddSingleton<ISqlSugarClient>(sugarScope); services.AddSingleton<ISqlSugarClient>(sugarScope);
return services; return services;
@ -466,6 +501,12 @@ public static class ServiceCollectionExtensions
return services; return services;
} }
/// <summary>
/// 配置Serilog
/// </summary>
/// <param name="services"></param>
/// <param name="configuration"></param>
/// <returns></returns>
public static IServiceCollection AddDefaultSerilog( public static IServiceCollection AddDefaultSerilog(
this IServiceCollection services, this IServiceCollection services,
IConfiguration configuration) IConfiguration configuration)
@ -481,8 +522,7 @@ public static class ServiceCollectionExtensions
var loggerConfiguration = new LoggerConfiguration() var loggerConfiguration = new LoggerConfiguration()
.MinimumLevel.Information() .MinimumLevel.Information()
.MinimumLevel.Override("Microsoft", LogEventLevel.Information) .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.WriteTo.Console(theme: AnsiConsoleTheme.Code) .WriteTo.Console(theme: AnsiConsoleTheme.Code);
.Enrich.FromLogContext();
if (serilogOptions.WriteFile) if (serilogOptions.WriteFile)
{ {
@ -507,4 +547,13 @@ public static class ServiceCollectionExtensions
}); });
return services; return services;
} }
public static IServiceCollection AddDefaultDatabaseSeed(this IServiceCollection services)
{
ArgumentNullException.ThrowIfNull(services);
services.TryAddScoped<DatabaseContext>();
services.TryAddScoped<DatabaseSeed>();
return services;
}
} }
Loading…
Cancel
Save