- appsettings 的 ConnectionStrings 从 4 条 PG 连接串(Rag/File/Im/Workflow) 合并为 1 条 Default(不含 Database) - 各模块 Infrastructure 从 Default 派生连接串(拼接各自 Database 名) 改一处连接信息,所有模块生效 - build 0/0
43 lines
1.7 KiB
C#
43 lines
1.7 KiB
C#
using BuildFlow.Shared.Infrastructure;
|
||
using File.Domain;
|
||
using File.Infrastructure.Persistence;
|
||
using File.Infrastructure.Storage;
|
||
using Microsoft.EntityFrameworkCore;
|
||
using Microsoft.Extensions.Configuration;
|
||
using Microsoft.Extensions.DependencyInjection;
|
||
using Microsoft.Extensions.Options;
|
||
using Volo.Abp.Modularity;
|
||
|
||
namespace File.Infrastructure;
|
||
|
||
/// <summary>
|
||
/// Infrastructure 层模块,注册数据库上下文(挂载审计拦截器)与 S3 存储服务。
|
||
/// </summary>
|
||
[DependsOn(typeof(FileDomainModule))]
|
||
public class FileInfrastructureModule : AbpModule
|
||
{
|
||
public override void ConfigureServices(ServiceConfigurationContext context)
|
||
{
|
||
var services = context.Services;
|
||
var config = services.GetConfiguration();
|
||
|
||
// DbContext 挂载审计拦截器,统一从 Default 连接串派生(替换 Database 名)
|
||
var baseConn = config.GetConnectionString("Default")!;
|
||
var fsConn = $"{baseConn};Database=file_system";
|
||
services.AddDbContext<FileDbContext>((sp, options) =>
|
||
options.UseNpgsql(fsConn)
|
||
.AddInterceptors(sp.GetRequiredService<AuditInterceptor>()));
|
||
|
||
// Scoped 生命周期:每个 HTTP 请求创建一个拦截器实例,确保 ICurrentUserContext 正确获取当前用户
|
||
services.AddScoped<AuditInterceptor>();
|
||
|
||
// S3 兼容存储(单例,AmazonS3Client 线程安全可复用)
|
||
services.Configure<S3Options>(config.GetSection(S3Options.SectionName));
|
||
services.AddSingleton<IS3StorageService>(sp =>
|
||
{
|
||
var options = sp.GetRequiredService<IOptions<S3Options>>().Value;
|
||
return new S3StorageService(Options.Create(options));
|
||
});
|
||
}
|
||
}
|