fengling-platform/Fengling.Platform.Infrastructure/Extensions.cs
movingsam 7877f89d35
Some checks failed
Build and Push Docker / build (push) Failing after 16s
Publish NuGet Packages / build (push) Failing after 1h7m51s
feat(platform): 增强 Infrastructure 层可扩展性,添加 NuGet 发布脚本与 CI/CD
## 主要变更

### Infrastructure 层重构
- `PlatformDbContext`: 构造函数改为接受泛型 `DbContextOptions`,支持派生上下文
- `TenantStore<TContext>`: 泛型化实现,支持不同的数据库上下文
- `Extensions`: 新增 `AddPlatformCore<TContext>` 扩展方法,简化服务注册

### 依赖调整
- 移除 Npgsql.EntityFrameworkCore.PostgreSQL 直接依赖,由使用方自行决定数据库提供程序

### CI/CD 集成
- 新增 `.gitea/workflows/publish-nuget.yml` Gitea Actions 工作流
- 新增 `push-platform-nuget.sh` 脚本,支持:
  - 从 git tag 自动获取版本号
  - HTTP/HTTPS 双模式支持
  - 独立 NuGet 配置文件
  - CI/CD 友好的环境变量配置

### 其他
- `NuGet.Config`: 新增 NuGet 配置文件
- `Fengling.Platform.Domain`: 添加 Items 文件夹占位
2026-02-27 13:58:09 +08:00

27 lines
871 B
C#

using Microsoft.Extensions.DependencyInjection;
namespace Fengling.Platform.Infrastructure;
public static class Extensions
{
public static IServiceCollection AddPlatformCore<TContext>(this IServiceCollection services,
Action<DbContextOptionsBuilder>? optionsAction = null,
Action<IServiceCollection>? serviceAction = null
)
where TContext : PlatformDbContext
{
if (optionsAction != null)
{
var isRegistry = services.Any(x => x.ImplementationType == typeof(TContext));
if (!isRegistry)
{
services.AddDbContext<TContext>(optionsAction);
}
}
services.AddScoped<ITenantStore, TenantStore<TContext>>();
services.AddScoped<ITenantManager, TenantManager>();
serviceAction?.Invoke(services);
return services;
}
}