You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AutoMapper接口嵌套映射异常:如何实现接口间嵌套映射?

解决AutoMapper接口嵌套映射问题

问题核心是AutoMapper无法自动推断如何将IBO2接口映射到IDBO2接口(接口无法直接实例化),同时你的实体可能被ORM生成了Castle动态代理类,导致AutoMapper需要明确的映射规则。下面是两种可行的解决方式:

方式一:添加接口到接口的映射并指定目标实现类

直接配置IBO2到IDBO2的映射,告诉AutoMapper使用DB2作为目标实例:

var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<IBO1, DB1>();
    // 关键配置:将IBO2映射为DB2实例,赋值给IDBO2类型的属性
    cfg.CreateMap<IBO2, IDBO2>().As<DB2>();
});

方式二:在父映射中显式配置嵌套成员

在IBO1到DB1的映射里,单独指定BO2成员的映射规则,明确目标类型:

var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<IBO2, DB2>();
    
    cfg.CreateMap<IBO1, DB1>()
        .ForMember(dest => dest.BO2, opt => 
        {
            opt.MapFrom(src => src.BO2);
            // 当源对象不为空时,将IBO2映射为DB2实例
            opt.ResolveUsing(src => src.BO2 != null ? Mapper.Map<DB2>(src.BO2) : null);
        });
});

原理说明

  • AutoMapper默认不处理接口到接口的映射,因为它无法确定要实例化哪个具体实现类,必须通过As<T>()或显式解析来指定目标类型。
  • 错误中的Castle.Proxies.ObjectProxy是ORM生成的动态代理类,本质上实现了对应的业务接口(IBO2),上述配置会让AutoMapper正确识别代理类并应用映射规则。

内容的提问来源于stack exchange,提问作者Felix Arnold

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 02:06:32