基于 DedsiFramework.md 的信息,提供 Dedsi Framework(ABP 扩展框架)的模块速查、接入步骤、常见用法与问题定位建议。
本 Skill 用于:
不在范围内:
信息来源:工作区根目录 DedsiFramework.md。
下列内容是对文档中各类库与类型的“可检索速记”。当你需要定位“这个类型属于哪个库/应该在哪里用”时,优先从这里开始。
定位:ASP.NET Core 扩展与中间件,增强 Web API 基础能力。
核心类型
DedsiAspNetCoreModule:模块定义文件,配置依赖。DedsiControllerBase:控制器基类(继承 AbpControllerBase)。FileByExcel、FileByPdf 便捷导出。Middlewares/DedsiGlobalExceptionHandler:全局异常处理中间件。DedsiErrorData(非 ABP 默认格式)时启用。DedsiErrorData JSON。UserFriendlyException、BusinessException 并提取错误码。DedsiErrorData:可选的错误响应结构封装(用于替代/兼容 ABP 默认错误响应)。DedsiErrorMessage:错误信息模型(Message、Code、ServiceTime)。定位:领域层基础扩展;增强审计、仓储、查询标记接口。
核心类型
DedsiDddDomainModule:模块定义。DedsiDddDomainConsts:领域常量(例如默认 DB Schema)。Auditing/Contracts/IDedsiCreationAuditedObjectAuditing/Contracts/IDedsiMayHaveCreatorAuditing/Contracts/IHasCreationNameQueries/IDedsiQuery:标记接口,继承 ITransientDependency。Repositories/IDedsiCqrsRepository:面向 CQRS 的仓储接口(Insert/Update/Delete 等)。Repositories/IDedsiRepository:增强通用仓储接口。GetQueryableNoTrackingAsync(无追踪查询)GetPagedListAsync(分页查询)DeleteManyAsync(批量删除)ExecuteSqlAsync(执行原生 SQL)定位:领域共享项目(枚举、常量、共享对象)。
核心类型
DedsiDddDomainSharedModule定位:应用服务契约层(DTO 与服务接口)。
核心类型
DedsiDddApplicationContractsModuleDtos/DedsiPagedRequestDto:分页请求基类(PageIndex、PageSize、IsExport)。Dtos/DedsiPagedResultDto:分页结果基类。Services/IDedsiApplicationService:应用服务基类接口。定位:应用服务层基础实现。
核心类型
DedsiDddApplicationModuleServices/DedsiApplicationService:继承 ABP ApplicationService 并实现 IDedsiApplicationService。定位:CQRS 核心库;集成 MediatR;提供命令/事件记录能力。
核心类型
DedsiDddCqrsModuleDedsiDddCqrsConsts命令/事件记录(Recorders)
CommandEventRecorder:记录实体。CqrsCeRecorder:记录服务实现(调用 Repository 保存)。ICqrsCeRecorder:记录服务接口。ICommandEventRecorderRepository:记录仓储接口。LocalCommandEventRecorderRepository:本地记录仓储实现(开发/日志)。命令处理(Handlers)
DedsiCommandHandler:命令处理器基类(注入 Logger、CurrentUser 等常用服务)。IDedsiCommandHandler命令(Commands)
DedsiCommand:命令基类(含 CommandId)。DedsiCommandId:命令 ID 值对象。IDedsiCommand事件总线(EventBus)
DedsiEvent、DedsiEventId、IDedsiEventDedsiLocalEventBus:自定义本地事件总线;重写 PublishAsync 以自动记录事件日志。中介者(Mediators)
DedsiMediator:封装 MediatR;发送命令前后自动记录日志。IDedsiMediator定位:EF Core 集成;实现 Dedsi.Ddd.Domain 的仓储接口;并提供 Dapper 集成。
核心类型
DedsiEntityFrameworkCoreModuleEntityFrameworkCore/DedsiEfCoreDbContextEntityFrameworkCore/IDedsiEfCoreDbContextPropertySetters/DedsiAuditPropertySetter:自动填充 CreatorName。Queries/DedsiDapperQueryQueries/DedsiEfCoreQuery:提供 GetNoTrackingQueryableAsync。Repositories/DedsiDddEfCoreRepository:IDedsiCqrsRepository 的 EF Core 实现。Repositories/DedsiEfCoreRepository:IDedsiRepository 的 EF Core 实现(分页、批量删除等)。定位:SqlSugar ORM 集成;提供另一种数据访问方式。
核心类型
DedsiSqlSugarModuleExtensions/DedsiSqlSugarExtensions:在模块配置中注册 SqlSugar(SqlServer、MySql)。Queries/DedsiSqlSugarQuery:基于 SqlSugar 的查询基类,实现 IDedsiQuery。定位:核心模块(最基础定义)。
DedsiCoreModule定位:集成 DotNetCore.CAP,处理分布式事务与消息队列。
DedsiCapModule定位:集成 FastEndpoints,提供轻量级 API 端点开发方式。
DedsiFastEndpointsModule定位:更像是整洁架构(Clean Architecture)模板/示例结构,不一定属于框架“核心能力”。
核心类型
Dedsi.CleanArchitecture.DomainDedsiCleanArchitectureDomainModuleDedsiCleanArchitectureDomainConstsDedsi.CleanArchitecture.HttpApiDedsiCleanArchitectureHttpApiModuleDedsi.CleanArchitecture.InfrastructureDedsiCleanArchitectureInfrastructureModule目标:把 Dedsi Framework 当作 ABP 模块集合接入。不同项目的模块装配点可能在 Host / HttpApi / Application 等层;以你的解决方案分层为准。
Dedsi.AspNetCoreDedsi.Ddd.Domain + Dedsi.Ddd.Domain.SharedDedsi.Ddd.Application.Contracts + Dedsi.Ddd.ApplicationDedsi.Ddd.CQRSDedsi.EntityFrameworkCoreDedsi.SqlSugarDedsi.CAPDedsi.FastEndpoints具体模块类名来自文档;实际命名空间/包引用以你的项目引用为准。
using Volo.Abp.Modularity;
[DependsOn(
typeof(DedsiAspNetCoreModule),
typeof(DedsiDddDomainModule),
typeof(DedsiDddDomainSharedModule),
typeof(DedsiDddApplicationContractsModule),
typeof(DedsiDddApplicationModule),
typeof(DedsiDddCqrsModule),
typeof(DedsiEntityFrameworkCoreModule)
)]
public class YourProjectModule : AbpModule;
// 如果需要可编译示例,使用:
// public class YourProjectModule : AbpModule
// {
// }
DedsiErrorData 作为统一错误契约,再启用 DedsiGlobalExceptionHandler。DedsiGlobalExceptionHandler 属于“替换/包裹默认输出”的中间件,注册顺序可能改变最终返回格式;若项目已有 ABP 统一错误返回约定,优先保持一致。DedsiAuditPropertySetter 生效。CreatorName 时,在创建时自动填充。目标:错误响应格式与项目 ABP 约定保持一致;仅在需要时切换到 DedsiErrorData。
落地策略(二选一):
BusinessException / UserFriendlyException 表达可预期错误(并携带错误码/消息)。DedsiErrorData 契约时,在 Host 管线启用 DedsiGlobalExceptionHandler。DedsiErrorData JSON(Message/Code/ServiceTime)。目标:快速导出 Excel/PDF。
落地步骤:
DedsiControllerBase。FileByExcel / FileByPdf(参数与具体生成逻辑以框架实现为准)。目标:命令与事件在发送/发布时自动记录。
要点:
DedsiMediator(而非直接使用 MediatR 的默认接口),以便“发送前后自动记录”。DedsiLocalEventBus 发布事件,以便 PublishAsync 自动记录事件日志。ICqrsCeRecorder + ICommandEventRecorderRepository(可选本地实现 LocalCommandEventRecorderRepository)。目标:读写分离与通用数据访问能力统一。
策略建议:
IDedsiCqrsRepository / 其 EF Core 实现 DedsiDddEfCoreRepository。IDedsiQuery 标记,并选择:DedsiEfCoreQuery 获取无追踪 IQueryable(GetNoTrackingQueryableAsync)。DedsiDapperQuery。DedsiSqlSugarQuery。目标:在通用仓储上统一分页、批量删除、执行 SQL。
要点:
IDedsiRepository(或其实现 DedsiEfCoreRepository)提供:GetPagedListAsyncDeleteManyAsyncExecuteSqlAsyncDependsOn 是否添加。先确认你到底期望哪一种格式:
DedsiGlobalExceptionHandler;并检查是否有自定义中间件/过滤器接管了异常输出。DedsiGlobalExceptionHandler 是否注册、顺序是否在路由/终结点之前;并检查业务层是否抛出了 BusinessException / UserFriendlyException(便于错误码提取)。DedsiAuditPropertySetter 是否启用。CreatorName 字段。DedsiMediator,发事件是否通过 DedsiLocalEventBus。ICqrsCeRecorder 与 ICommandEventRecorderRepository 是否有实现并完成 DI 注册。LocalCommandEventRecorderRepository 验证记录链路(如果项目允许)。