本文描述 Fast.NET 的模块边界、实际项目引用关系、应用启动流程和兼容策略。README 中的架构图用于快速理解分层;本文以仓库中的 .csproj 引用为准。
Fast.NET 遵循以下原则:
- 能力按包拆分:每个模块独立发布,使用方只承担所选能力的依赖成本。
- 依赖保持单向:上层集成模块可以依赖基础模块,基础模块不反向感知业务集成。
- 优先使用 .NET 惯用扩展点:服务注册、应用构建和中间件启用分别围绕标准宿主抽象实现。
- 跨版本 API 隔离:多目标项目使用条件编译或条件包引用处理框架差异。
- 通用工具保持轻量:
Fast.IaaS不依赖 ASP.NET Core,并以netstandard2.1发布。
flowchart TB
application["应用层<br/>ASP.NET Core · Worker · Console"]
subgraph integration["集成层"]
consul["Fast.Consul"]
swagger["Fast.Swagger"]
openapi["Fast.OpenApi"]
jwt["Fast.JwtBearer"]
dynamic["Fast.DynamicApplication"]
unify["Fast.UnifyResult"]
end
subgraph services["能力层"]
cache["Fast.Cache"]
eventbus["Fast.EventBus"]
logging["Fast.Logging"]
mapster["Fast.Mapster"]
di["Fast.DependencyInjection"]
sqlsugar["Fast.SqlSugar"]
stj["Fast.Serialization.System.Text.Json"]
newtonsoft["Fast.Serialization.Newtonsoft.Json"]
end
subgraph base["基础层"]
core["Fast.NET.Core"]
runtime["Fast.Runtime"]
iaas["Fast.IaaS"]
end
application --> integration
application --> services
integration --> base
services --> base
core --> runtime
- Fast.Runtime:ASP.NET Core 共享运行时、上下文、配置与通用扩展,是多数 Web 模块的基础依赖。
- Fast.NET.Core:应用初始化、配置文件扫描、CORS、压缩、请求缓冲等应用级核心能力。
- Fast.IaaS:与 Web 宿主无关的通用扩展、校验、文件、编码和密码学工具。
缓存、日志、事件总线、对象映射、依赖注入、数据访问和两种序列化实现位于此层。它们可以按需组合,其中两个序列化包通常二选一。
认证、统一响应、动态 API、Swagger、OpenAPI 和 Consul 面向应用边界或外部系统,允许依赖基础层和必要的其他集成模块。
下图只表示仓库内 ProjectReference,不包含第三方 NuGet 依赖:
flowchart LR
core["Fast.NET.Core"] --> runtime["Fast.Runtime"]
cache["Fast.Cache"] --> runtime
di["Fast.DependencyInjection"] --> runtime
eventbus["Fast.EventBus"] --> runtime
jwt["Fast.JwtBearer"] --> runtime
logging["Fast.Logging"] --> runtime
mapster["Fast.Mapster"] --> runtime
openapi["Fast.OpenApi"] --> runtime
sqlsugar["Fast.SqlSugar"] --> runtime
unify["Fast.UnifyResult"] --> runtime
dynamic["Fast.DynamicApplication"] --> runtime
dynamic --> unify
swagger["Fast.Swagger"] --> runtime
swagger --> dynamic
consul["Fast.Consul"] --> runtime
consul --> core
consul --> iaas["Fast.IaaS"]
stj["Fast.Serialization.System.Text.Json"]
newtonsoft["Fast.Serialization.Newtonsoft.Json"]
序列化包和 Fast.IaaS 没有仓库内项目依赖,因此适合被独立引用。第三方依赖包括 CSRedisCore、Consul、Mapster、Newtonsoft.Json、SqlSugar、Swashbuckle.AspNetCore 等,具体版本统一由 Directory.Packages.props 管理。
sequenceDiagram
participant App as "应用 Program.cs"
participant Core as "Fast.NET.Core"
participant DI as "IServiceCollection"
participant Host as ".NET Host"
participant Pipeline as "HTTP Pipeline"
App->>Core: builder.Initialize()
Core->>Core: 加载配置并保存宿主上下文
App->>DI: 按需注册 Fast.* 模块
DI->>Host: builder.Build()
Host->>Host: 执行模块 StartupFilter
App->>Pipeline: 启用中间件与端点
Pipeline-->>App: 应用开始处理请求
Initialize() 负责核心宿主和配置初始化。其他能力通过各模块扩展方法注册;部分 Web 模块通过 IStartupFilter 将必要行为接入宿主启动过程。
| 范围 | 策略 |
|---|---|
| Web 与基础设施模块 | 同时面向 .NET 8、9、10 构建 |
| 通用工具模块 | Fast.IaaS 面向 .NET Standard 2.1 |
| 框架差异 | 通过条件编译和条件 PackageReference 隔离 |
| 统一配置 | Directory.Build.props 管理目标框架、文档、包元数据、验证和输出目录;Directory.Packages.props 管理依赖版本 |
| SDK 选择 | global.json 固定基线并允许 feature-band 滚动 |
| 发布产物 | 每个模块生成 .nupkg、.snupkg 和 XML 文档 |
新增模块时建议遵循以下约束:
- 将项目放在
src/<ModuleName>/,并使用Fast.<ModuleName>包名。 - 优先继承仓库统一构建属性,不在项目中重复目标框架和打包元数据。
- 仅添加必要的
ProjectReference,避免形成循环依赖。 - 面向宿主的注册入口使用清晰的扩展方法,并为公共 API 编写 XML 文档。
- 框架专属依赖使用按
TargetFramework区分的条件引用。 - 更新中英文 README、架构图和模块目录。
- 行为变更应提供明确的验证步骤,然后构建所有受影响目标;发布前单独执行
dotnet pack并检查nupkgs/中生成的包。