用ConstructUsing替换映射

时间:2014-06-24 14:28:56

标签: c# automapper

我使用Automapper 3.2.1进行映射:

    Mapper.CreateMap<AvvisoPec, EsitiPostalizzazione>()
        .ForMember(dst => dst.IDAvviso, src => src.MapFrom(v => EstraiIdAvviso(v)))
        .ForMember(dst => dst.CodiceErrorePiattaforma, src => src.MapFrom(v => EstraiCodiceErrorePiattaforma(v.History)))
        .ForMember(dst => dst.DescrizioneErrorePiattaforma, src => src.MapFrom(v => EstraiDescrizioneErrorePiattaforma(v.History)))
        .ForMember(dst => dst.CodiceEsitoPostalizzazione, src => src.MapFrom(v => EstraiEsitoPostalizzazione(v.History)))

这很好用。现在我想删除无参数构造,以便使用更好的封装::

public EsitiPostalizzazione(int IDAvviso, int CodiceEsitoPostalizzazione, String CodiceErrorePiattaforma, String DescrizioneErrorePiattaforma)
{
    this.IDAvviso = IDAvviso;
    this.CodiceEsitoPostalizzazione = CodiceEsitoPostalizzazione;
    this.CodiceErrorePiattaforma = CodiceErrorePiattaforma;
    this.DescrizioneErrorePiattaforma = DescrizioneErrorePiattaforma;
}

所以据我记载,我应该在ConstructUsing之后使用createMap(),但我不知道如何使用它,有人可以帮助我吗? 网络上的所有example都会产生类似的内容:

Mapper.CreateMap<AvvisoPec, EsitiPostalizzazione>()
      .ConstructUsing(x => new EsitiPostalizzazione(x.IdAvviso, ...))

但我没有x.IDAvviso

1 个答案:

答案 0 :(得分:2)

x lambda中的ConstructUsing应该是您的源类型,即AvvisoPec。因此,当您使用EsitiPostalizzazione构造函数时,您需要按照使用MapFrom语法时的方式提供值。

根据您的代码,我希望它是:

Mapper.CreateMap<AvvisoPec, EsitiPostalizzazione>()
      .ConstructUsing(v => new EsitiPostalizzazione(EstraiIdAvviso(v),
            EstraiEsitoPostalizzazione(v.History),     
            EstraiCodiceErrorePiattaforma(v.History),
            EstraiDescrizioneErrorePiattaforma(v.History)));