跳到主要内容
版本:2.2.0

项目搭建

可参考项目Demo配合文档一起了解

Demo地址:https://gitee.com/feifei_code/aegis-demo.git

Step1 建立项目和层级

创建Webapi 项目,需要注意框架得选择.NET 6.0。如下图配置(可根据需求自定义勾选)

image.png|800

然后依次建立下列类库

如下图

image.png|400

Step2 导入组件依赖文件

在Webapi项目下创建Component.deps.json文件,并确保复制到输出目录下。这个文件是组件依赖配置,请确保生成后的文件夹中包含此文件。 内容大致如下,可根据需求决定包含哪些组件。

{  
"Components":
{
"Services": [ "Logging","Swagger","IdGenerator","BusinessServices","Authorization","RequestValidation","EventBus","SsoAuthorize"],
"Middlewares": ["Swagger","Authorization"]
}
}

下面是目前全部组件的表格,可以视情况添加到配置中。

⚠️ 注意,记得同时导入对应的Nuget包,否则不生效

组件名功能说明备注可添加位置对应Nuget包
Logging日志组件提供Nlog和接口日志、异常日志等功能ServicesAegis.Core.Logs
SwaggerSwagger提供Swagger功能,展现接口文档Services/MiddwaresAegis.Extensions.Swagger
IdGeneratorID生成器提供雪花Id、Id池等功能ServicesAegis.IdGenerator
BusinessServices业务服务层提供业务服务和契约注入服务,使用了Services层请务必注入ServicesAegis.Services
Authorization认证鉴权提供基本认证和鉴权功能,还需要接入更具体的认证服务Services/MiddlewaresAegis.Core.Authorization
RequestValidation请求验证提供参数请求验证,使用FluentValidation提供功能ServicesAegis.Transfer
EventBus事件总线提供内存内的发布订阅、生产消费功能ServicesAegis.EventBus
SsoAuthorizeSSO认证Authorization的具体实现,请确保顺序在Authorization后面ServicesAegis.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中引入的组件不需要再手动注入了

  1. 注意此处不再需要手动注入Aegis组件服务了,框架已经根据Component.deps.json完成了注入。
  2. 目前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代码 image.png|800

至此一个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的构造方法里可以接收所需要业务领域的ServiceLogger,具体写法如下

public class IpVisitPrePayController : ApiControllerBase
{
private readonly IpVisitPrePayService _ipVisitPrePayService;
private readonly ILogger _logger;

public IpVisitPrePayController(IpVisitPrePayService ipVisitPrePayService, ILogger<IpVisitPrePayController> logger)
{
this._ipVisitPrePayService = ipVisitPrePayService;
_logger = logger;
}
// 控制器代码...
}

初始化项目