项目搭建
可参考项目Demo配合文档一起了解
Demo地址:https://gitee.com/feifei_code/aegis-demo.git
Step1 建立项目和层级
创建Webapi 项目,需要注意框架得选择.NET 6.0。如下图配置(可根据需求自定义勾选)
然后依次建立下列类库
如下图
Step2 导入组件依赖文件
在Webapi项目下创建Component.deps.json
文件,并确保复制到输出目录下。这个文件是组件依赖配置,请确保生成后的文件夹中包含此文件。
内容大致如下,可根据需求决定包含哪些组件。
{
"Components":
{
"Services": [ "Logging","Swagger","IdGenerator","BusinessServices","Authorization","RequestValidation","EventBus","SsoAuthorize"],
"Middlewares": ["Swagger","Authorization"]
}
}
下面是目前全部组件的表格,可以视情况添加到配置中。
⚠️ 注意,记得同时导入对应的Nuget包,否则不生效
组件名 | 功能说明 | 备注 | 可添加位置 | 对应Nuget包 |
---|---|---|---|---|
Logging | 日志组件 | 提供Nlog和接口日志、异常日志等功能 | Services | Aegis.Core.Logs |
Swagger | Swagger | 提供Swagger功能,展现接口文档 | Services/Middwares | Aegis.Extensions.Swagger |
IdGenerator | ID生成器 | 提供雪花Id、Id池等功能 | Services | Aegis.IdGenerator |
BusinessServices | 业务服务层 | 提供业务服务和契约注入服务,使用了Services层请务必注入 | Services | Aegis.Services |
Authorization | 认证鉴权 | 提供基本认证和鉴权功能,还需要接入更具体的认证服务 | Services/Middlewares | Aegis.Core.Authorization |
RequestValidation | 请求验证 | 提供参数请求验证,使用FluentValidation提供功能 | Services | Aegis.Transfer |
EventBus | 事件总线 | 提供内存内的发布订阅、生产消费功能 | Services | Aegis.EventBus |
SsoAuthorize | SSO认证 | Authorization的具体实现,请确保顺序在Authorization后面 | Services | Aegis.Authorization.SSO |
需要注意的是,如果之前Swagger是手动注入的,此时可以引用Aegis的Swagger组件
Aegis.Extensions.Swagger
的Nuget包,具体使用请参考具体文档Swagger
Step3 改造Program.cs
将Program里直接改为下述代码即可。
AegisApplication.Run(args);
Step4 引入Startup
在对应的Webapi项目下,建立Startup类
,用于配置自身的注入和服务引入。
请按照以下代码的格式来编写Startup
,继承自ICustomStartup
接口,在ConfigureServices
来注入想要注入的服务,在Configure
方法里来引入Middleware
。
更多Startup的细节建议参考自定义Startup
需要注意的是在Setp 2中引入的组件不需要再手动注入了
- 注意此处不再需要手动注入Aegis组件服务了,框架已经根据
Component.deps.json
完成了注入。- 目前Freesql的注入还未接入Aegis组件,还需要自己注入。
public sealed class Startup : ICustomStartup
{
public void ConfigureServices(IServiceCollection services)
{
var connectionString = ConfigManager.Get("SqlConnection");
services.AddDbSource<AegisDb>(x =>
{
x.ConnectionString = connectionString;
x.DataType = "SqlServer";
});
services.AddDbRepositories<AegisDb>();
services.AddSingleton<ICat,GreenCat>();
services.AddSingleton<ICat, RedCat>();
}
public void Configure(IApplicationBuilder app)
{
}
public void ConfigureInitializer(IInitializerContext context)
{
}
}
PS:以下是HIS项目的Startup代码
至此一个Aegis的基本项目就已经搭建好了,接下来请参考各个层次的文档来了解各层级之间的具体实现。
WebApi
该层级的项目目前分为两种类型
- 对内API,命名规则为
领域系统.业务领域.WebApi
,比如HIS下的住院对内服务,命名为His.IpVisit.WebApi
- 对外API,命名规则为
领域系统.业务领域.LinkApi
,比如HIS下的门诊对外服务,命名为His.OpVisit.LinkApi
目录结构
- Controller
-- XXXController //接口控制器
-- ...
- Configuration
-- xxxBizConfig.json //业务配置,以BizConfig.json结尾的配置
- appsettings.json //系统配置
- Nlog.config //日志配置
Controller
类与构造方法
Controller
类需要继承于ApiControllerBase
抽象类,该类为Controller下提供一系列返回方法和处理。
对应Controller的构造方法里可以接收所需要业务领域的Service
和Logger
,具体写法如下
public class IpVisitPrePayController : ApiControllerBase
{
private readonly IpVisitPrePayService _ipVisitPrePayService;
private readonly ILogger _logger;
public IpVisitPrePayController(IpVisitPrePayService ipVisitPrePayService, ILogger<IpVisitPrePayController> logger)
{
this._ipVisitPrePayService = ipVisitPrePayService;
_logger = logger;
}
// 控制器代码...
}