Mapster如何指定接口字段的具体实现类进行实例化?
Mapster映射接口到指定实现类的解决方案
你遇到的问题是Mapster默认会为接口生成动态实现类,要让它使用指定的DataUserInfo作为IDataUserInfo的实现,有两种简洁且有效的配置方式:
1. 全局配置接口与实现类的映射
这种方式适用于所有需要将对象映射到IDataUserInfo的场景,配置一次即可全局生效:
public class MappingConfig : IRegister { public void Register(TypeAdapterConfig config) { // 配置:当需要将UserInfo转换为IDataUserInfo时,实例化DataUserInfo config.NewConfig<UserInfo, IDataUserInfo>().MapToType<DataUserInfo>(); // ObjectA到ObjectB的映射无需额外指定UserInfo,会自动沿用上面的规则 config.NewConfig<ObjectA, ObjectB>(); } }
2. 仅针对ObjectA到ObjectB的局部配置
如果只想在这个特定映射中使用DataUserInfo,可以直接在映射规则里指定:
public class MappingConfig : IRegister { public void Register(TypeAdapterConfig config) { config.NewConfig<ObjectA, ObjectB>() .Map(dest => dest.UserInfo, src => src.UserInfo.Adapt<DataUserInfo>()); } }
为什么你之前的配置没生效?
你手动逐个字段赋值的方式虽然可行,但如果字段较多容易遗漏,而且Mapster的自动映射逻辑优先级可能导致手动构造的对象未生效。上面两种方式都是利用Mapster内置的映射规则,既简洁又能确保正确实例化指定的实现类。
内容的提问来源于stack exchange,提问作者Denis Kaminsky
相关产品推荐
相关产品推荐

