This commit is contained in:
movingsam 2026-02-19 21:40:22 +08:00
parent 489f02cb5f
commit fb466b35ea

View File

@ -57,30 +57,30 @@ try
builder.Services.AddScoped<IPointsProcessingService, PointsProcessingService>(); builder.Services.AddScoped<IPointsProcessingService, PointsProcessingService>();
builder.Services.AddScoped<IPointsAccountCache, PointsAccountCache>(); builder.Services.AddScoped<IPointsAccountCache, PointsAccountCache>();
builder.Services.AddScoped<ICodeDistributedLock, CodeDistributedLock>(); builder.Services.AddScoped<ICodeDistributedLock, CodeDistributedLock>();
#region #region
var redis = await ConnectionMultiplexer.ConnectAsync(builder.Configuration.GetConnectionString("Redis")!); var redis = await ConnectionMultiplexer.ConnectAsync(builder.Configuration.GetConnectionString("Redis")!);
builder.Services.AddSingleton<IConnectionMultiplexer>(_ => redis); builder.Services.AddSingleton<IConnectionMultiplexer>(_ => redis);
// DataProtection - use custom extension that resolves IConnectionMultiplexer from DI // DataProtection - use custom extension that resolves IConnectionMultiplexer from DI
builder.Services.AddDataProtection() builder.Services.AddDataProtection()
.PersistKeysToStackExchangeRedis("DataProtection-Keys"); .PersistKeysToStackExchangeRedis("DataProtection-Keys");
// 配置JWT认证 // 配置JWT认证
builder.Services.Configure<AppConfiguration>(builder.Configuration.GetSection("AppConfiguration")); builder.Services.Configure<AppConfiguration>(builder.Configuration.GetSection("AppConfiguration"));
var appConfig = builder.Configuration.GetSection("AppConfiguration").Get<AppConfiguration>() ?? new AppConfiguration { JwtIssuer = "netcorepal", JwtAudience = "netcorepal" }; var appConfig = builder.Configuration.GetSection("AppConfiguration").Get<AppConfiguration>() ?? new AppConfiguration
{ JwtIssuer = "netcorepal", JwtAudience = "netcorepal" };
builder.Services.AddAuthentication().AddJwtBearer(options =>
{ builder.Services.AddAuthentication().AddJwtBearer(options =>
options.RequireHttpsMetadata = false; {
options.TokenValidationParameters.ValidAudience = appConfig.JwtAudience; options.RequireHttpsMetadata = false;
options.TokenValidationParameters.ValidateAudience = true; options.TokenValidationParameters.ValidAudience = appConfig.JwtAudience;
options.TokenValidationParameters.ValidIssuer = appConfig.JwtIssuer; options.TokenValidationParameters.ValidateAudience = true;
options.TokenValidationParameters.ValidateIssuer = true; options.TokenValidationParameters.ValidIssuer = appConfig.JwtIssuer;
}); options.TokenValidationParameters.ValidateIssuer = true;
});
builder.Services.AddNetCorePalJwt().AddRedisStore(); builder.Services.AddNetCorePalJwt().AddRedisStore();
#endregion #endregion
@ -124,6 +124,7 @@ try
{ {
options.EnableSensitiveDataLogging(); options.EnableSensitiveDataLogging();
} }
options.EnableDetailedErrors(); options.EnableDetailedErrors();
}); });
builder.Services.AddUnitOfWork<ApplicationDbContext>(); builder.Services.AddUnitOfWork<ApplicationDbContext>();
@ -151,11 +152,11 @@ try
builder.Services.AddMediatR(cfg => builder.Services.AddMediatR(cfg =>
cfg.RegisterServicesFromAssemblies( cfg.RegisterServicesFromAssemblies(
Assembly.GetExecutingAssembly(), Assembly.GetExecutingAssembly(),
typeof(Fengling.Member.Application.Commands.Member.RegisterMemberCommand).Assembly, typeof(Fengling.Member.Application.Commands.Member.RegisterMemberCommand).Assembly,
typeof(Fengling.Member.Domain.Aggregates.Users.MemberEntity).Assembly, typeof(Fengling.Member.Domain.Aggregates.Users.MemberEntity).Assembly,
typeof(Fengling.Member.Infrastructure.Repositories.MemberRepository).Assembly typeof(Fengling.Member.Infrastructure.Repositories.MemberRepository).Assembly
) )
.AddCommandLockBehavior() .AddCommandLockBehavior()
.AddKnownExceptionValidationBehavior() .AddKnownExceptionValidationBehavior()
.AddUnitOfWorkBehaviors()); .AddUnitOfWorkBehaviors());
@ -199,7 +200,7 @@ try
builder.Services.AddScoped<IPointsProcessingService, PointsProcessingService>(); builder.Services.AddScoped<IPointsProcessingService, PointsProcessingService>();
builder.Services.AddScoped<IPointsHistoryRepository, PointsHistoryRepository>(); builder.Services.AddScoped<IPointsHistoryRepository, PointsHistoryRepository>();
builder.Services.AddScoped<IPointsAccountCache, PointsAccountCache>(); builder.Services.AddScoped<IPointsAccountCache, PointsAccountCache>();
builder.Services.AddScoped<PointsRuleMatcher>(); builder.Services.AddScoped<PointsRuleMatcher>();
#endregion #endregion
@ -246,7 +247,7 @@ try
#endregion #endregion
app.MapMetrics(); // 通过 /metrics 访问指标 app.MapMetrics(); // 通过 /metrics 访问指标
// Code analysis endpoint // Code analysis endpoint
app.MapGet("/code-analysis", () => app.MapGet("/code-analysis", () =>
{ {
@ -256,7 +257,7 @@ try
); );
return Results.Content(html, "text/html; charset=utf-8"); return Results.Content(html, "text/html; charset=utf-8");
}); });
app.UseHangfireDashboard("/hangfire"); app.UseHangfireDashboard("/hangfire");
RecurringJob.AddOrUpdate<IMediator>( RecurringJob.AddOrUpdate<IMediator>(
@ -279,4 +280,4 @@ finally
public partial class Program public partial class Program
#pragma warning restore S1118 #pragma warning restore S1118
{ {
} }