Galosys.Foundation.Core 26.8.18.1

dotnet add package Galosys.Foundation.Core --version 26.8.18.1
                    
NuGet\Install-Package Galosys.Foundation.Core -Version 26.8.18.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Galosys.Foundation.Core" Version="26.8.18.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Galosys.Foundation.Core" Version="26.8.18.1" />
                    
Directory.Packages.props
<PackageReference Include="Galosys.Foundation.Core" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Galosys.Foundation.Core --version 26.8.18.1
                    
#r "nuget: Galosys.Foundation.Core, 26.8.18.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Galosys.Foundation.Core@26.8.18.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Galosys.Foundation.Core&version=26.8.18.1
                    
Install as a Cake Addin
#tool nuget:?package=Galosys.Foundation.Core&version=26.8.18.1
                    
Install as a Cake Tool

Galosys.Foundation.Core

成熟度: 🟢 稳定 — 生产可用,测试充分,活跃维护

Galosys.Foundation 核心库,提供统一响应模型、DDD 实体基类、扩展方法、安全加密、消息总线、模块化机制等基础能力。

特性一览

领域 功能
统一响应 UnifiedResponse 成功/失败/异常/处理中
DDD 实体 Entity / FullEntity / TenantEntity / AppEntity + 领域事件
ID 生成 Snowflake、LocalGenerator、Nanoid、Ulid、Uuid
分页 PageOutputPageQuery 分页查询基类
消息 事件订阅/发布、IMessageBus + Outbox 引擎
COLA 架构 Executor 模板方法、ExtensionPoint 扩展点、PluginRegistry
Resilience 弹性 重试/熔断/超时/隔离/限流/降级(Polly 实现)
State Machine 三泛型状态机 + Builder DSL + 持久化
Rules Engine 规则引擎 + 构建器 + 回退链
分布式锁 IDistributedLock 抽象 + 内存实现
分布式幂等 IDistributedIdempotence 接口
告警 IAlarmer 告警日志基础设施
AI 集成 通义千问 Embedding
Excel 操作 IXlsHelper 流式读/写/模板填充
数据结构 BloomFilter、WorkerPool、ChannelTemplate、责任链
工具类 Env、ServiceLocator、Poco、Tree、ITimeProvider、数据脱敏、签名等
模块化 编译时 SourceGen + 运行时双模式模块发现
DI 上下文 ITenantContext / IAppContext / IUserContext

1. 统一响应模型

// 成功响应
var response = UnifiedResponse.Succeed(data, "操作成功");

// 失败响应
var response = UnifiedResponse.Fail("ERROR_CODE", "操作失败");

// 异常响应
var response = UnifiedResponse.Error("ERROR_CODE", exception);

// 处理中
var response = UnifiedResponse.Processing("PROCESSING_CODE");

2. 实体与 DDD 模式

// 完整实体(含创建者、修改者、软删除)
public class User : FullEntity<long>
{
    public string Name { get; set; }
}

// 基础实体
public class Entity
{
    public IReadOnlyCollection<ApplicationMessage> DomainEvents { get; }
    protected void AddEvent(ApplicationMessage @event) { }
}
实体基类矩阵
Entity (abstract, 领域事件)
  └── Entity<TID> (abstract, [Key, SnowflakeId] Id)
       ├── FullEntity<TID> (abstract, IDeletable + ICreator + ILastModifier)
       │    ├── TenantEntity<TID>      : FullEntity<TID>, IMultiTenancy
       │    ├── AppEntity<TID>         : FullEntity<TID>, IMultiApplication
       │    └── TenantAppEntity<TID>   : FullEntity<TID>, IMultiTenancy, IMultiApplication
基类 适用场景 示例
FullEntity<TID> 全局基础数据,不分租户和应用 地区、字典、系统配置
TenantEntity<TID> 仅分租户 用户、角色、权限
AppEntity<TID> 仅分应用 菜单、API 接口
TenantAppEntity<TID> 租户 + 应用 租户应用配置

实体可混入 IConcurrency 实现乐观并发控制:

public class SysUser : TenantEntity<long>, IConcurrency
{
    [Timestamp]
    public byte[] RowVersion { get; protected set; } = null!;
}

3. ID 生成

// 雪花算法 ID
var id = SnowflakeIdGenerator.Instance.NextId();

// 本地 ID 发生器
var id = LocalGenerator.NextId();
var couponKey = LocalGenerator.NextCouponKey();
var seqKey = LocalGenerator.NextSeqKey();
var guid = LocalGenerator.NextGuid();

此外支持多种 ID 策略(通过特性标注实体字段):

[Nanoid]      // Nanoid 字符串 ID
[Ulid]        // ULID 有序唯一标识
[Uuid]        // UUID 标识

4. 分页

var pageResult = PageOutput.Of(items, total, page, size);

5. 单例模式

// 线程安全的延迟初始化单例
var instance = Singleton<MyService>.GetInstance();

// 使用 Lazy<T> 的单例
var instance = LazySingleton<MyService>.Instance;

6. 消息订阅/发布

// 发布消息
await publisher.PublishAsync(new UserCreatedEvent(this));

// 订阅消息
public class UserCreatedListener : ApplicationListener<UserCreatedEvent>
{
    public override Task<bool> HandleAsync(UserCreatedEvent e)
    {
        return Task.FromResult(true);
    }
}

7. 扩展方法

// DateTime 扩展
var lastDay = dt.LastDayInMonth();
var firstDay = dt.FirstDayInMonth();
var isWeekend = dt.IsWeekend();
var workDate = dt.AddWorkDays(3);
var unixMs = dt.ToUnixTimeMilliseconds();
var unixSec = dt.ToUnixTimeSeconds();
var datetime = timestamp.ToDateTime();

// String 扩展
var compressed = "content".ToGZipCompress();
var decompressed = compressed.ToGZipDecompress();

// Object 扩展
var result = obj.GetAsyncResult<Task<string>>();

// IQueryable 扩展
queryable.WhereIf(condition, x => x.IsActive)
         .Page(pageIndex, pageSize);

// 集合扩展
list.Shuffle();
list.TopologicalSort(selector);
list.Slice(5);
list.BinaryInsertSort(item, comparer);

8. 安全加密

// MD5 加密
var hashed = SecurityTemplate.Md5Encrypt(original);

// DES 加解密
var encrypted = SecurityTemplate.DesEncrypt(original);
var decrypted = SecurityTemplate.DesDecrypt(encrypted);

// AES 加解密
var encrypted = SecurityTemplate.AesEncrypt(original, key);
var decrypted = SecurityTemplate.AesDecrypt(encrypted, key);

// RSA 加解密
var encrypted = SecurityTemplate.RSAEncrypt(original, publicKey);
var decrypted = SecurityTemplate.RSADecrypt(encrypted, privateKey);

// 许可证生成与验证
var license = SecurityTemplate.GenerateLicense(info);
var valid = SecurityTemplate.ValidateLicense(license);

9. 动态代理

class HttpProxy : ServiceProxy
{
    protected override void Proceed(InvocationContext context)
    {
        var http = context.ServiceProvider.GetRequiredService<IHttpClientFactory>().CreateClient();
        context.SetReturnValue(http.GetStringAsync("/posts/1"));
    }
}

var instance = ServiceProxyFactory.CreateProxy(typeof(ITypicodeClient), typeof(HttpProxy), sp) as ITypicodeClient;

10. 进程管理

// 启动进程
var p = new Process().Start("cmd.exe", runAsAdministrator: true);

// 打开浏览器
p = new Process().Browser("https://example.com");

// 打开资源管理器
p = new Process().Explore("c://");

// 执行脚本
p = new Process().Script("dotnet.exe", "info");

11. HTTP 客户端

services.AddHttpClient<IPlaceholderGateway, PlaceholderGateway>(http =>
{
    http.BaseAddress = new Uri("https://jsonplaceholder");
}).AddServiceDiscovery()
  .AddStandardHedgingHandler();

12. 验证码生成

var code = Random.Shared.GenerateCaptcha();   // 验证码
var sms = Random.Shared.GenerateSms();         // 短信验证码

13. 应用程序启动器

public class MyRunner : IApplicationRunner
{
    public int Order => 0;
    public async Task RunAsync(ApplicationArguments args) { }
}

14. PluginRegistry(插件注册表)

基于策略路由模式的基础设施,根据请求自动匹配对应插件实现。适用于短信网关、支付渠道、物流商等多 provider 场景。

public interface ISmsPlugin : Plugin<SmsRequest>
{
    Task SendAsync(SmsRequest request);
}

internal class AliyunSmsPlugin : ISmsPlugin
{
    public bool Supports(SmsRequest request) => request.Provider == "aliyun";
    public Task SendAsync(SmsRequest request) { /* ... */ }
}

// DI 注册
services.AddTransient<ISmsPlugin, AliyunSmsPlugin>();

// 使用
var registry = serviceProvider.GetRequiredService<PluginRegistry<ISmsPlugin, SmsRequest>>();
var plugin = registry.GetPluginFor(request);
await plugin.SendAsync(request);
模式 行为
GetPluginFor 单匹配 — 返回第一个匹配插件
GetAllPluginsFor 多匹配 — 返回所有匹配插件(广播场景)
PluginResolutionMode.Scoped 默认,创建新 DI Scope
PluginResolutionMode.Singleton 从根容器直接获取

15. Executor 模板方法

提供命令执行管道,按顺序执行:前置钩子 → 参数校验 → 业务逻辑 → 后置钩子,统一返回 UnifiedResponse

// 注册
services.AddCola();

// 定义命令
public class OrderCreateCmd : CommandBase
{
    public string OrderNo { get; set; }
    public override ValidationResult Validate() { /* ... */ }
}

// 实现 Executor
public class OrderCreateExecutor : ExecutorBase<OrderCreateCmd>
{
    protected override UnifiedResponse DoExecute(OrderCreateCmd command)
    {
        return UnifiedResponse.Succeed(new { OrderId = Guid.NewGuid() });
    }
}
阶段 方法 说明
前置钩子 OnBeforeExecute 记录日志,可重写
参数校验 command.Validate() 失败返回 VALIDATION_ERROR
业务逻辑 DoExecute / DoExecuteAsync 子类必须实现
后置钩子 OnAfterExecute 记录日志,可重写
业务异常 HandleBusinessException 捕获 BizException
系统异常 HandleSystemException 返回 SYSTEM_ERROR

16. ExtensionPoint(扩展点机制)

基于 COLA 架构的扩展点模式,通过 BizScenario(业务身份)路由到不同的扩展点实现。

public interface IPaymentStrategy : IExtensionPoint
{
    Task<PaymentResult> PayAsync(PaymentRequest request);
}

[Extension(BizId = "default", UseCase = "default", Scenario = "wechat")]
public class WechatPaymentStrategy : IPaymentStrategy { /* ... */ }

// 使用
var scenario = BizScenario.ValueOf("default", "default", paymentType);
var result = await executor.ExecuteAsync<IPaymentStrategy, PaymentResult>(
    scenario, svc => svc.PayAsync(request));

匹配降级策略:精确匹配 → 场景通配 → 用例通配 → 全局默认。

支持批量执行(ExecuteAll / ExecuteAllAsync)和归约(ReduceAsync)。


17. PageQuery(分页查询基类)

var query = new PageQuery
{
    PageIndex = 2,
    PageSize = 10,
};
query.SetOrderDirection("ASC");
int offset = query.Offset; // 10
属性 说明 默认
PageIndex 页码(最小1) 1
PageSize 每页大小(最小1) 10
Offset 偏移量(只读) (PageIndex-1)*PageSize
OrderDirection 排序方向 "DESC"

18. MessageBus + Outbox 引擎

提供 IMessageBus 统一消息入口(Send + Publish),以及 Transactional Outbox 模式保证业务事务与消息发送的原子性。

// 进程内默认总线
await bus.PublishAsync("order.created", order);

// 实现消息处理器
public class OrderCreatedHandler : IMessageHandler<OrderCreatedEvent>
{
    public Task<bool> HandleAsync(OrderCreatedEvent msg) { /* ... */ }
}

// DI 注册
services.AddScoped<IMessageHandler<OrderCreatedEvent>, OrderCreatedHandler>();

Outbox 模式: PendingMsgCol 收集待发送消息,DbContext.DrainPendingOutbox()SaveChanges 时同事务写入 base_outbox_msg 表(列名 snake_case),后台 OutboxRelay 轮询投递。

性能优化(Phase 2): OutboxMessage 新增 Version 字段支持乐观锁,IOutboxStore 新增 TryAcquireBatchAsync / MarkManySentAsync / MarkManyFailedAsync 批量 API,OutboxRelay 改为 TryAcquireBatchParallel.ForEachAsync(DOP=4)→ MarkMany 流水线,吞吐目标 200-500/s。

services.AddRabbitMessageBus(options => {
    options.EnableOutbox = true;
    options.Outbox.DefaultMode = "Outboxed"; // 默认走 outbox
});
services.AddEfCoreOutboxStore<MyDbContext>();
配置项 默认值 说明
EnableOutbox true 全局 outbox 开关
TableName "base_outbox_msg" 发件箱表名(列名 snake_case)
SchemaName "base" 数据库 schema
DefaultMode "Outboxed" 路由默认策略:"Outboxed"=走 outbox,"Direct"=直发
MaxRetryCount 3 最大重试次数(0=不限)
BatchSize 500 每次轮询拉取数
PollIntervalMs 500 轮询间隔(ms)
RetentionDays 7 已发送消息保留天数
组件 说明
IMessageBus 统一消息入口
PendingMsgCol AsyncLocal 消息收集器
OutboxSaveChangesInterceptor EF Core 保存拦截器
OutboxRelay 后台轮询投递服务
OrphanedCleanupService 孤儿消息清理
OutboxMeter OpenTelemetry 指标(含 outbox.orphaned.total 未落库丢弃计数)

OutboxMeter 指标一览:

指标名 类型 说明
outbox.sent.total Counter 累计发送成功数
outbox.failed.total Counter 累计发送失败数
outbox.retry.exhausted Counter 重试耗尽丢弃数
outbox.orphaned.total Counter 累计未落库丢弃数 — PublishAsync 后未调 SaveChanges 导致消息丢失时递增
outbox.scan.duration Histogram 单次轮询耗时(ms)
outbox.pending.count ObservableGauge 待发送消息数

19. 上下文服务(DI)

框架内置 ITenantContextIAppContextIUserContext 三个 Singleton 上下文服务,基于 AsyncLocal<T> 实现请求级隔离。

public class MyService
{
    public MyService(ITenantContext tenant, IAppContext app, IUserContext user) { }
}

20. Resilience 弹性管道

Microsoft.Extensions.Resilience — 基于 Polly 的弹性管道,支持命名管道配置。

// 注册
services.AddResilience();

// 使用命名管道
var pipeline = provider.GetRequiredService<IResiliencePipelineProvider>()
    .GetPipeline("my-service");

await pipeline.ExecuteAsync(async ct =>
{
    return await httpClient.GetAsync("api/data", ct);
});

支持策略: Retry(重试)、CircuitBreaker(熔断)、Timeout(超时)、Bulkhead(隔离)、RateLimiter(限流)、Fallback(降级)。

{
  "Resilience": {
    "Pipelines": {
      "my-service": {
        "Retry": { "MaxRetryAttempts": 3, "BackoffType": "Exponential" },
        "CircuitBreaker": { "FailureThreshold": 0.5, "SamplingDuration": "00:01:00" },
        "Timeout": { "TimeoutInterval": "00:00:10" }
      }
    }
  }
}
说明
IResiliencePipeline 弹性管道接口
IResiliencePipelineBuilder 管道构建器(链式配置策略)
IResiliencePipelineProvider 命名管道提供者
PollyResiliencePipeline Polly 实现

21. State Machine 状态机

Microsoft.Extensions.StateMachine — 三泛型 IStateMachine<S, E, C> 通用状态机,支持 Builder DSL、拦截器、监听器、持久化。

// 注册
services.AddStateMachine();

// 定义状态机
var machine = stateMachineFactory.Create<OrderState, OrderEvent, OrderContext>(builder =>
{
    builder.InitialState(OrderState.Pending)
        .From(OrderState.Pending)
            .On(OrderEvent.Submit).To(OrderState.Confirmed).Perform(ctx => HandleSubmit(ctx))
        .From(OrderState.Confirmed)
            .On(OrderEvent.Ship).To(OrderState.Shipped)
        .From(OrderState.Shipped)
            .On(OrderEvent.Deliver).To(OrderState.Completed);
});

// 触发转换
var result = await machine.FireAsync(OrderEvent.Submit, context);
说明
IStateMachine<S,E,C> 状态机接口
IStateMachineFactory 状态机工厂
IStateMachineInterceptor 状态转换拦截器
IStateMachineListener 状态转换监听器
IStateMachinePersister 状态持久化(默认内存)

22. Rules Engine 规则引擎

Microsoft.Extensions.Rules — 规则定义、构建、执行、事件监听与回退链。

// 注册
services.AddRules();

// 定义规则
[Rule(Name = "VipDiscount", Priority = 1)]
public class VipDiscountRule : IRuleEntity
{
    public RuleExecuteResult Execute(RuleDefinition rule, object context)
    {
        var order = (OrderContext)context;
        if (order.UserLevel == "VIP")
            return RuleExecuteResult.Success(new { Discount = 0.9 });
        return RuleExecuteResult.Skip();
    }
}

// 执行
var engine = provider.GetRequiredService<IRuleEngine>();
var result = await engine.ExecuteAsync("order.discount", orderContext);
说明
IRuleEngine 规则引擎接口
RuleBuilder 规则构建器
RuleDefinition 规则定义
FallbackChain 参数回退链
IRuleEventListener 规则事件监听器

23. Distributed Lock 分布式锁

Microsoft.Extensions.Locking.Distributed — 分布式锁抽象,内置内存实现。

// 注册
services.AddDistributedLock();

// 使用
var handle = await distributedLock.TryAcquireAsync("lock:order:123");
if (handle != null)
{
    try { /* 临界区 */ }
    finally { await handle.ReleaseAsync(); }
}
说明
IDistributedLock 分布式锁接口
IDistributedLockHandle 锁句柄
InMemoryDistributedLock 内存实现(用于开发和测试)

24. Distributed Idempotence 分布式幂等

Microsoft.Extensions.Idempotence — 分布式幂等性控制。

// 注册
services.AddIdempotence();

// 使用
var result = await idempotence.TryExecuteAsync("order:submit:123", async () =>
{
    return await orderService.SubmitAsync(order);
});
说明
IDistributedIdempotence 幂等性控制接口
InMemoryDistributedIdempotence 内存实现

25. Alarming 告警

Microsoft.Extensions.Alarming — 告警日志基础设施。

// 注册
services.AddAlarmer();

// 使用
alarmer.Alarm("数据库连接超时", new { Db = "OrderDb", Timeout = 30 });
说明
IAlarmer 告警器接口
Alarmer 告警器抽象基类
AlarmLogger 告警日志实现

26. AI 集成

Microsoft.Extensions.AI — 配置驱动的 AI 客户端 + RAG 能力。

26.1 注册

// 从 appsettings.json 读取 AI:Chat / AI:Embedding 配置
services.AddAI(configuration);

26.2 配置文件

"AI": {
  "Chat": {
    "Qwen":       { "Provider": "OpenAI",    "Endpoint": "", "ApiKey": "", "ModelId": "" },
    "DeepSeek":   { "Provider": "Anthropic",  "Endpoint": "", "ApiKey": "", "ModelId": "" },
    "Local":      { "Provider": "Ollama",     "Endpoint": "", "ApiKey": null, "ModelId": "" }
  },
  "Embedding": {
    "Qwen":       { "Provider": "Qwen",       "Endpoint": "", "ApiKey": "", "ModelId": "" },
    "OpenAI":     { "Provider": "OpenAI",     "Endpoint": "", "ApiKey": "", "ModelId": "" }
  }
}

26.3 Chat 调用

// 通过 key 获取对应 ChatClient
var qwen = services.GetRequiredKeyedService<IChatClient>("Qwen");

// 每次调用可设置不同 SystemPrompt
var response = await qwen.GetResponseAsync(
    [new(ChatRole.System, "你现在是一个英语翻译助手"),
     new(ChatRole.User, "你好")]);

26.4 Embedding 调用

var gen = services.GetRequiredKeyedService<IEmbeddingGenerator<string, Embedding<float>>>("Qwen");
var embeddings = await gen.GenerateAsync(["文本1", "文本2"]);

26.5 RAG(检索增强生成)

使用 UseRag() 前需先注册 VectorStore 实现(如 InMemory、Qdrant 等):

// 注册 VectorStore(自行选择实现)
services.AddSingleton<VectorStore>(sp => new MyVectorStore(...));

// 通过管道注册全局 RAG
services.AddChatClient(builder => builder
    .UseRag(configure: o => { o.Mode = RagMode.Simple; o.TopK = 3; })
    .Use(new OpenAIClient(apiKey)).AsChatClient("gpt-4"));

// 调用时动态控制
var response = await chatClient.GetResponseAsync(
    [new(ChatRole.User, "公司的年度目标是什么?")],
    new ChatOptions
    {
        AdditionalProperties = new()
        {
            ["rag_collection"] = "company_docs"
        }
    });

26.6 使用支持的 Chat Client

Provider 说明 实现方式
OpenAI(Chat+Embedding) OpenAI 兼容 API(含 Qwen/Azure) meai.openai 官方包
Anthropic(Chat) Anthropic Claude AnthropicClient SDK 包装
Ollama(Chat,扩展包) 本地 Ollama OllamaSharp
Qwen(Embedding) 通义千问 Embedding 内置 QwenEmbeddingGenerator

26.7 Chat 层中间件(护栏 / 压缩)

AddAI 为每个配置创建的 IChatClient 自动装配默认中间件管线,顺序为 UseOpenTelemetryUseLoggingUseDistributedCacheUseCompactionUseOutputGuardrail → [可选的 UseFunctionInvocation]。缺 DI 依赖(ILoggerFactory / IDistributedCache / 护栏 / 压缩服务)的中间件自动跳过。

开关位于 AIProviderOptionsEnable*,逐 provider 生效),默认值:EnableOpenTelemetry=trueEnableLogging=trueEnableDistributedCache=false(需应用注册 IDistributedCache)、EnableFunctionInvocation=false(防与 MAF agent 工具循环冲突)、EnableCompaction=trueEnableOutputGuardrail=true

"AI": {
  "Chat": {
    "Qwen": { "Provider": "OpenAI", "Endpoint": "", "ApiKey": "", "ModelId": "",
              "EnableDistributedCache": true }
  }
}

也可在独立 IChatClient 上显式装配中间件(护栏/压缩原语位于 Microsoft.Extensions.AI 命名空间):

// 护栏:注册评估器链(TryAdd 语义,可覆盖)
services.AddOutputGuardrail(o => o.BlockedKeywords = ["机密"]);
// 压缩:注册选项
services.AddCompaction(o => o.MaxMessages = 32);

// 在 ChatClientBuilder 上显式挂载
services.AddChatClient(builder => builder
    .UseCompaction(o => o.Strategy = CompactionStrategy.Truncate)
    .UseOutputGuardrail(sp)
    .Use(new OpenAIClient(apiKey)).AsChatClient("gpt-4"));
类型 说明
OutputGuardrailChatClient / UseOutputGuardrail 输出护栏中间件,命中敏感词抛 OutputGuardrailException
CompactionChatClient / UseCompaction / CompactionOptions 对话压缩中间件,超限截断或摘要
AddOutputGuardrail / AddCompaction 护栏 / 压缩 DI 注册
IOutputGuardrailEvaluatorRuleBasedOutputGuardrailIPiiDetectorIPiiRedactor 护栏/PII 原语(自 Galosys.Foundation.Agents.AI 下沉,无 MAF 依赖)

27. Excel 操作

IXlsHelper — 流式读取、流式写入、模板填充,支持列映射和自定义转换。

// 注册
services.AddXlsHelper();

// 流式读取
var records = xlsHelper.ExtractAsync<OrderDto>(stream, options);

// 流式写入
await xlsHelper.WriteAsync(stream, orders, options);

// 模板填充
await xlsHelper.FillAsync(templateStream, outputStream, data, options);
说明
IXlsHelper Excel 操作接口
IXlsWriter<T> 流式写入器
IXlsSheetWriter<T> 工作表写入器
XlsColumnAttribute 列映射特性
XlsSheetAttribute 工作表映射特性
AbstractXlsAppService Excel 应用服务基类

28. Responsibility Chain 责任链

public class ValidationHandler : AbstractChainHandler<OrderContext>
{
    public override async Task HandleAsync(OrderContext context, Func<Task> next)
    {
        if (context.IsValid)
            await next();
    }
}

// 执行
await chainClient.ExecuteAsync(context);

29. 数据结构

BloomFilter

var filter = new BloomFilter<string>(expectedItems: 100000, falsePositiveRate: 0.01);
filter.Add("item1");
bool exists = filter.Contains("item1"); // true

WorkerPool

// 注册
services.AddWorkerPool();

// 使用
await workerPool.EnqueueAsync(async ct => { /* 工作任务 */ }, cancellationToken);
实现 说明
TaskWorkerPool 基于 Task 的工作池
ThreadWorkerPool 基于 Thread 的工作池

ChannelTemplate

var channel = new ChannelTemplate<string>(capacity: 100);
await channel.Writer.WriteAsync("data");
var item = await channel.Reader.ReadAsync();

30. 工具类

Env — 环境检测

Env.IsKubernetes;        // 是否在 K8s 中运行
Env.MachineIP;           // 本机 IP 地址
Env.MachineName;         // 主机名
Env.IsDevelopment();     // 是否开发环境

ServiceLocator — 服务定位器

var service = ServiceLocator.GetService<IMyService>();

Poco — DTO 基类

public class UserDto : Poco
{
    public string Name { get; set; }
}
var clone = original.Clone();

ITreeNode — 树形结构

var tree = TreeNodeHelper.BuildTree(nodes);
var flat = TreeNodeHelper.Flatten(tree);

ITimeProvider — 时间提供者

public class MyService
{
    public MyService(ITimeProvider time) { }
    // 测试时可注入 mock 时间
}

数据脱敏

public class UserDto
{
    [DataMask(MaskType.Partial)]
    public string Phone { get; set; } // 138****1234
}

API 签名

var signature = SignUtils.GenerateSign(parameters, secretKey);
var valid = SignUtils.VerifySign(parameters, secretKey, signature);

二倍均值算法(红包分配)

var amounts = Bma.Divide(totalAmount: 100, count: 5);

命名帮助

var queue = Naming.Queue("order");     // 队列命名
var topic = Naming.Topic("order");     // 主题命名
var key = Naming.Key("order:123");     // Key 命名

Enumeration — 智能枚举

public class OrderStatus : Enumeration<OrderStatus>
{
    public static readonly OrderStatus Pending = new(1, "待处理");
    public static readonly OrderStatus Completed = new(2, "已完成");
}

31. DI 服务注册

// 核心注册(模块化、消息总线、消息发布等)
// 幂等:模块路径(UseModularization)与显式路径共存时不重复注册
services.AddCore();

// COLA 架构
services.AddCola(typeof(MyCommand).Assembly);

// 消息总线 + Outbox
services.AddMessageBus();
services.AddOutbox();

// 弹性管道
services.AddResilience();

// 状态机
services.AddStateMachine();

// 规则引擎
services.AddRules();

// 分布式锁
services.AddDistributedLock();

// 分布式幂等
services.AddIdempotence();

// 告警
services.AddAlarmer();

// Excel 操作
services.AddXlsHelper();

// AI 集成(读取 appsettings.json 的 AI 节)
services.AddAI(configuration);

// 服务发现
services.AddServiceDiscovery();

// 健康检查(自动发现 [HealthCheck] 属性探针 + 内置 ResourceUtilization/Lifecycle)
services.AddHealthChecksAll();

// 自动扫描注册
// 排除依赖测试 SDK(xunit/NUnit/MSTest 等)的程序集,宿主与集成包照常扫描
services.AddScannable();

32. 目录结构

Galosys.Foundation.Core/
├── Galosys\Foundation\Core\
│   ├── ModuleDescriptor.cs
│   ├── Executor/                  # COLA Executor 模板方法
│   ├── ExtensionPoint/            # COLA ExtensionPoint 扩展点
│   └── Xls/                       # Excel 操作
├── Microsoft\Extensions\
│   ├── AI/                        # AI 集成(通义千问)
│   ├── Alarming/                  # 告警基础设施
│   ├── Configuration/             # 配置绑定扩展
│   ├── DependencyInjection/       # DI 注册 + 模块化系统
│   ├── Diagnostics/               # 诊断 + Metrics
│   ├── Hosting/                   # HostBuilder 扩展
│   ├── Idempotence/               # 分布式幂等
│   ├── Locking/Distributed/       # 分布式锁
│   ├── MessageBus/                # 消息总线 + Outbox 引擎 (renamed from Messaging)
│   ├── Options/                   # 配置选项类
│   ├── Resilience/                # 弹性管道
│   ├── Rules/                     # 规则引擎
│   ├── StateMachine/              # 状态机
│   └── MessageBus/                # 消息总线
├── System\
│   ├── BloomFilter.cs             # 布隆过滤器
│   ├── ChannelTemplate.cs         # Channel 消息管道模板
│   ├── DateTimeExtensions.cs
│   ├── Env.cs                     # 环境检测
│   ├── Enumeration.cs             # 智能枚举
│   ├── Naming.cs                  # 命名帮助
│   ├── Poco.cs                    # DTO 基类
│   ├── ServiceLocator.cs          # 服务定位器
│   ├── Security/Cryptography/     # 加密算法
│   ├── StringExtensions.cs
│   └── WorkerPool/                # 工作池
└── System\Text\Json\Serialization\
    └── DataMaskConverter.cs       # 数据脱敏

33. 测试

Outbox 测试覆盖

测试文件 组件 用例数
InMemoryOutboxStoreTests InMemoryOutboxStore 14
OutboxRelayTests OutboxRelay 后台轮询 6
MessageBusOutboxTests MessageBus outbox 路径 4
PendingMsgColTests PendingMsgCol AsyncLocal 收集器 3
# 运行 outbox 存储层测试
dotnet test framework/test/Galosys.Foundation.Core.Tests/ --filter "FullyQualifiedName~InMemoryOutboxStoreTests"

# 运行 outbox 服务层测试
dotnet test framework/test/Galosys.Foundation.Core.Tests/ --filter "FullyQualifiedName~OutboxRelay"
dotnet test framework/test/Galosys.Foundation.Core.Tests/ --filter "FullyQualifiedName~MessageBusOutbox"

34. 依赖

  • Microsoft.Extensions.Caching.Abstractions / Memory
  • Microsoft.Extensions.DependencyInjection
  • Microsoft.Extensions.DependencyModel
  • Microsoft.Extensions.Diagnostics.HealthChecks
  • Microsoft.Extensions.Hosting
  • Microsoft.Extensions.Http
  • Microsoft.Extensions.ObjectPool
  • Polly.Core
  • System.Threading.RateLimiting

Outbox 引擎零新增依赖,复用已有 Microsoft.Extensions.Hosting / DI。

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (143)

Showing the top 5 NuGet packages that depend on Galosys.Foundation.Core:

Package Downloads
Galosys.Foundation.AspNetCore

Galosys.Foundation快速开发库

Galosys.Foundation.Data

Galosys.Foundation快速开发库

Galosys.Foundation.AspNetCore.DynamicApi

Galosys.Foundation快速开发库

Galosys.Foundation.HttpClient

Galosys.Foundation快速开发库

Galosys.Foundation.Redis

Galosys.Foundation快速开发库

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
26.8.18.1 477 8/18/2026
26.8.17.1 730 8/17/2026
26.8.13.2 1,200 8/13/2026
26.8.13.1 1,250 8/13/2026
26.8.12.2 1,330 8/12/2026
26.8.12.1 1,336 8/12/2026
26.8.10.1 1,385 8/10/2026
26.8.5.1 1,559 8/5/2026
26.8.4.1 1,600 8/4/2026
26.8.3.1 1,667 8/3/2026
26.7.31.1 1,631 7/31/2026
26.7.30.1 1,521 7/30/2026
26.7.29.1 1,549 7/29/2026
26.7.28.1 1,542 7/28/2026
26.7.26.2 1,564 7/26/2026
26.7.26.1 1,550 7/25/2026
26.7.25.1 1,581 7/25/2026
26.7.24.2 1,671 7/24/2026
26.7.24.1 1,652 7/24/2026
26.7.22.1 1,640 7/23/2026
Loading failed