build-flow.api/src/modules/file/Infrastructure/FileInfrastructureModule.cs
xiangning 44927e651e refactor: 统一 PG 连接串为一个 Default
- appsettings 的 ConnectionStrings 从 4 条 PG 连接串(Rag/File/Im/Workflow)
  合并为 1 条 Default(不含 Database)
- 各模块 Infrastructure 从 Default 派生连接串(拼接各自 Database 名)
  改一处连接信息,所有模块生效
- build 0/0
2026-07-02 14:10:41 +08:00

43 lines
1.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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));
});
}
}