SuperAPI AI 工具集

aspnet-boilerplate-development

编程与开发

查看项目

更新于 10-15 10:10

技能介绍

用途

该技能面向使用 ASP.NET Boilerplate(ABP)框架与 .NET 10.0 的开发者,提供针对 EAF(Enterprise Application Foundation)中间件模块的专家级开发指导。EAF 项目基于 ABP 框架构建,自定义中间件模块位于 src 目录,为基于 ABP 的应用提供企业级功能。技能目标是帮助编写功能完整、可维护、高性能且可扩展的代码,并遵循 ABP 与 .NET 最佳实践。

项目背景与当前状态

  • .NET 版本:10.0
  • ABP 版本:基于 ABP 的自定义 EAF 实现
  • 数据库:支持 SQL Server 与 SQLite
  • 架构:N 层架构(领域层、应用层、基础设施层)

EAF 中间件模块(src/)

  • Eaf.Castle.Serilog:与 Castle Windsor 集成的 Serilog 日志
  • Eaf.KeyVault:Azure Key Vault 集成
  • Eaf.KeyVault.AspNetCore:Azure Key Vault 的 ASP.NET Core 集成
  • Eaf.Log4NetServiceBus:Log4Net 与 Service Bus 集成
  • Eaf.Middleware.Application:应用层中间件
  • Eaf.Middleware.AzureActiveDirectory:Azure AD 集成
  • Eaf.Middleware.Core:核心中间件抽象
  • Eaf.Middleware.Ldap:LDAP 身份验证集成
  • Eaf.Middleware.Web.Core:Web 核心中间件
  • Eaf.Middleware.Worker:后台工作器中间件
  • Eaf.OpenTelemetry:OpenTelemetry 可观测性
  • Eaf.SqlServerCache:SQL Server 分布式缓存
  • Eaf.SqliteCache:SQLite 分布式缓存

主要能力

N 层架构

领域层:实体继承自 Entity、AggregateRoot 或 FullAuditedEntity;仓储使用 IRepository<TEntity, TKey>;领域服务承载不适合放入实体的业务逻辑;规约(Specifications)封装查询逻辑;领域事件通过 IDomainEventHandler 实现事件驱动架构;值对象为无标识的不可变对象。

应用层:应用服务继承自 ApplicationService 或 IApplicationService;使用 DTO 作为输入输出;通过 DataAnnotations 或 FluentValidation 进行验证;使用 [AbpAuthorize] 特性进行授权;使用 [RequiresFeature] 进行功能管理;通过 IAuditingStore 自动记录审计日志。

基础设施层:使用 EfCoreRepositoryBase 实现自定义仓储;使用 EF Core 迁移;集成 Hangfire 或 Quartz 后台任务;SignalR 实时通知;通过 ICacheManager 实现分布式缓存。

依赖注入

ABP 使用 Castle Windsor 进行依赖注入,支持构造函数注入。依赖生命周期包括:ITransientDependency(每次创建)、ISingletonDependency(单实例)、IScopedDependency(按请求作用域)。

常用 ABP 服务

  • 会话管理:通过 IAbpSession 获取当前用户 ID 等
  • 设置管理:通过 ISettingManager 读取设置值
  • 缓存:通过 ICacheManager 获取缓存并回源
  • 日志:通过 ILogger 记录信息与错误

多租户

EAF 支持多租户,可使用数据过滤器。可通过 DisableFilter(AbpDataFilters.MayHaveTenant) 禁用租户过滤器以执行宿主操作,或通过 SetTenantId(tenantId) 设置租户上下文。

授权

通过权限定义类声明权限常量(如 Pages.Users、Pages.Users.Create 等),使用 [AbpAuthorize] 特性标注,也可通过 PermissionChecker.IsGrantedAsync 以编程方式检查权限。

后台任务

后台任务继承 BackgroundJob<Args> 并实现 ITransientDependency,在 Execute 方法中处理逻辑。

工作单元

ABP 自动使用工作单元模式:应用服务中自动启动并提交;也可通过 _unitOfWorkManager.Begin() 手动控制并调用 CompleteAsync 提交。

对象映射

使用与 ABP 集成的 AutoMapper:定义 Profile 映射配置,在应用服务中通过 ObjectMapper.Map 进行转换。

EAF 特定模式

  • 模块初始化:通过 [DependsOn(typeof(AbpKernelModule))] 声明依赖,在 Initialize 中按约定注册程序集
  • Serilog 集成:依赖 AbpCastleSerilogModule,自动配置 Serilog
  • Key Vault 集成:通过 IEafKeyVaultManager 的 GetSecretAsync 获取密钥
  • OpenTelemetry 集成:依赖 EafOpenTelemetryModule,自动收集指标、追踪与日志
  • SQL Server 缓存:依赖 AbpRedisCacheModule 与 EafSqlServerCacheModule,配置 SQL Server 分布式缓存,可用时回退到 Redis

数据库最佳实践

DbContext 继承 AbpDbContext,在 OnModelCreating 中配置实体表名与约定;自定义仓储接口继承 IRepository,实现继承 EfCoreRepositoryBase。

配置

appsettings.json 中可配置连接字符串、站点根地址、Redis 配置等;模块可在 PreInitialize 中追加 AutoMapper 配置。

测试

单元测试可继承 AbpIntegratedTestBase,通过 Resolve 获取服务并断言结果。

常见问题与解决方案

  • 循环依赖:改用属性注入、拆分服务或使用 Lazy<T> 延迟初始化
  • 性能问题:对频繁访问数据使用缓存、使用投影优化查询、使用 IQueryable 在数据库端操作、长任务考虑后台作业
  • 多租户问题:访问数据前检查租户上下文、正确使用数据过滤器、同时测试宿主与租户场景

文件命名约定

实体位于 Entities 文件夹,DTO 位于 Dtos 文件夹,应用服务位于 AppServices 文件夹,接口与实现同目录;类名使用 PascalCase,方法参数使用 camelCase。

使用方式

该技能以指导性内容形式提供,供开发者在编写 ABP/EAF 代码时参考。资料未提供具体的安装命令或调用步骤。

适用场景

适用于基于 ASP.NET Boilerplate 与 EAF 中间件构建企业级 .NET 10.0 应用的开发工作,包括领域建模、应用服务编写、依赖注入配置、多租户与授权实现、缓存与日志集成、数据库访问与测试等。

限制

资料未提供该技能的收费、价格、平台支持范围或效果保证等信息。