AutoMapper
本页聚合对象映射的注册方式、Profile 约定和项目级 resolver 扩展方式。
适用场景
- DTO、实体、领域模型之间的转换。
- 统一注册
Profile。 - 需要在项目层补时间、用户、上下文相关 resolver。
必须遵守
- 所有映射定义统一放在
Profile中。 Profile必须可被无参实例化,以便框架扫描注册。- 不在业务层手动构造独立
MapperConfiguration作为常规方案。
推荐做法
- 通用转换器与系统级 Profile 放公共库。
- 业务 Profile 放业务程序集。
- 复杂业务把用户时区、会话、上下文相关转换放到项目级 resolver,而不是把逻辑塞进 Controller。
常见坑
- 映射规则散落在多个静态工具类。
- 映射初始化与宿主 Json、序列化语义不一致。
- 在业务代码中临时 new
MapperConfiguration(...)。
真实用例
- gmandarin-backend:
CurrentUserTimeResolver、UserLocalTimeResolver、ResloveUTCTimeByGmLocalTimezone。 - niusys-webapi:宿主阶段集中注册 AutoMapper。