如何在AutoMapper中调用相同类型的不同映射策略

本文关键字:映射 策略 同类型 AutoMapper 调用 | 更新日期: 2023-09-27 18:05:09

我有一个客户类&我想有客户电子邮件字段显示在CSV格式的管理列表视图。当编辑视图显示时,我想让视图显示电子邮件在一个文本框中,用换行符分割。

我不想有2个不同的类为每个视图只是使用相同的,第一个使用IEnumerable<T>来显示列表。我的类是相当大的,我不想有2个单独的视图类来管理。

理想的目标是为每个不同的映射场景提供2个不同的AutoMapper映射,而不仅仅局限于在引导阶段使用CreateMap创建的映射。我该如何做到这一点?实际上,我想根据我在代码中的位置来切换映射策略。

如何在AutoMapper中调用相同类型的不同映射策略

理想情况下,您将使用两个不同的视图模型,并将源映射到所需的目标。然而,如果你不想走这条路,一个选择是创建一个具有两个只读属性的视图模型。

public class SomeClassViewModel
{
    public string FirstName { get; set;}
    public string LastName { get; set; }
    public string Emails { get; set; }
    public string EmailsCSV
    {
        get
        {
            var csv = Emails;
            //Do CSV transform here
            return csv;
        }
    }
    public string EmailsCRLF
    {
        get
        {
            var crlf = Emails;
            //Do crlf transform here
            return crlf;
        }
    }
}

再次强调,理想情况下,您希望坚持每个视图一个模型的规则。这并不意味着你需要为每个模型编写一个全新的视图,总是有继承的。

MyViewModelA : MyViewModelBase
MyViewModelB : MyViewModelBase