AutoMapper 9.0:AutoMapperMappingException:'缺少类型映射配置或不支持的映射。

时间:2020-06-09 11:42:09

标签: c# .net automapper

我正在使用WCF服务,并已通过AutoFac设置了DI,并且还希望使用automapper。我相信我的注射正确无误,因为当我进入该服务希望致电时可以看到我的配置。

在我的global.asax文件中,我具有此配置;

protected void Application_Start(object sender, EventArgs e)
    {
        var builder = new ContainerBuilder();
        builder.RegisterType<ProposalService>().As<IProposalService>();
        builder.RegisterType<ProposalListService>().As<IProposalListService>();
        builder.RegisterType<ProposalContext>().As<IProposalContext>();
        builder.RegisterType<GetProposalListRequestProfile>().As<Profile>();
        builder.Register(c => new MapperConfiguration(cfg =>
        {
            foreach (var profile in c.Resolve<IEnumerable<Profile>>())
            {
                cfg.AddProfile(profile);
            }

        })).AsSelf().SingleInstance();

        builder.Register(c => c.Resolve<MapperConfiguration>().CreateMapper(c.Resolve)).As<IMapper>().InstancePerLifetimeScope();


        AutofacHostFactory.Container = builder.Build();
    }

在服务中,我不想使用

public class ProposalListService : IProposalListService
{
    private IProposalContext _proposalContext;
    private IMapper _mapper;

    public ProposalListService(IProposalContext proposlContext, IMapper mapper)
    {
        _proposalContext = proposlContext;
        _mapper = mapper;
    }

    public getProposalListResponse GetProposalList(getProposalListRequest request)
    {
        var mappedRequest = _mapper.Map<getProposalListRequest, Data.Models.getProposalListRequest>(request);
        var result = _proposalContext.GetProposalList(mappedRequest);
        var mappedResponse = _mapper.Map<Data.Models.getProposalListResponse, getProposalListResponse>(result);
        return mappedResponse;
    }
}

还有我的映射配置文件

public class GetProposalListRequestProfile : Profile
{
    public GetProposalListRequestProfile()
    {
        IMappingExpression<Data.Models.getProposalListRequest, getProposalListRequest>
            mappingExpression =
                CreateMap<Data.Models.getProposalListRequest, getProposalListRequest>()
                    .ForMember(dest => dest.getProposalList, opt => opt.MapFrom(src => src.getProposalList));

    }
}

结构是

WCF服务将转到类库,然后将调用EF来获取数据,但是,当我到达第var mappedRequest = _mapper.Map<getProposalListRequest, Data.Models.getProposalListRequest>(request);行时,会出现错误

AutoMapper.AutoMapperMappingException:'缺少类型映射配置或不支持的映射。'

请您为解决此问题提供任何帮助。

谢谢

1 个答案:

答案 0 :(得分:1)

如果您将检查CreateMap方法,您将看到下一个:

IMappingExpression<TSource, TDestination> CreateMap<TSource, TDestination>();

因此,您的CreateMap<Data.Models.getProposalListRequest, getProposalListRequest>()将创建从Data.Models.getProposalListRequestgetProposalListRequest的地图,因此要处理用例,您可以添加还原的注册,也可以尝试在{之后添加.ReverseMap()调用{1}}。

相关问题