架构一览
本文将从宏观角度介绍 SharwAPI 的整体架构设计。SharwAPI 采用微内核架构(Microkernel Architecture),核心框架仅负责最基础的生命周期管理,而具体的业务功能完全由插件系统驱动。
术语统一
在接下来的内容中,为了预防理解困难,再次介绍各术语和其对应的项目
- CoreAPI 、 API本体 、 sharwapi.Core :均指代 API框架本体 ,仅包含负责插件加载、路由注册等底层任务代码
- Contracts 、接口层 、Contracts.Core : 均指代 定义插件与核心框架之间通信的接口 ,插件需要实现
IApiPlugin接口,核心框架通过此接口与插件进行交互
核心设计理念
SharwAPI 的设计遵循以下核心原则:
- 微内核 (Microkernel): API 本体(CoreAPI)不包含任何具体的业务逻辑。
- 功能插件化 (Plugin-based): 所有功能(包括路由、服务、中间件)均通过插件实现。
- 依赖注入 (DI) 驱动: 深度集成 ASP.NET Core 的 DI 容器,实现模块间的松耦合。
系统分层
整体架构可以分为以下三层:
1. 宿主层 (Host Layer)
即 sharwapi.Core 项目。
- 职责:
- 加载配置文件 (
appsettings.json)。 - 扫描并加载插件程序集 (
.dll)。 - 初始化全局 DI 容器。
- 负责在启动过程中依次调用插件的各个方法(如注册服务、配置中间件、注册路由)。
- 加载配置文件 (
2. 接口层 (Contract Layer)
即 sharwapi.Contracts.Core 项目。
- 职责:
- 定义核心接口
IApiPlugin。 - 提供插件开发所需的公共依赖。
- 确保宿主与插件之间的通信协议一致。
- 定义核心接口
3. 插件层 (Plugin Layer)
即各个 sharwapi.Plugin.* 项目。
- 职责:
- 实现具体的业务逻辑。
- 注册特定的服务和中间件。
- 定义 API 端点。
启动流程
SharwAPI 的启动流程遵循以下顺序:
- 初始化: 创建
WebApplicationBuilder,配置日志和基础选项。 - 插件加载: 扫描
Plugins目录,反射加载实现了IApiPlugin的程序集。 - 服务注册: 遍历所有插件,调用
RegisterServices。此时插件将自己的服务注入到全局 DI 容器中。 - 构建应用: 调用
builder.Build(),生成WebApplication实例。 - 中间件配置: 遍历所有插件,调用
Configure。插件将自己的中间件插入到请求管道中。 - 路由注册: 遍历所有插件,调用
RegisterRoutes。插件定义具体的 API 端点。 - 运行: 启动 Web 服务器,开始监听请求。