所有从特定类继承的通用AutoMapper映射

时间:2017-08-15 08:31:28

标签: c# generics automapper automapper-6

我的大多数视图模型都继承自名为EncryptedBaseViewModel的基本视图模型。此方法加密ID,以便用户看不到数据库敏感信息。

我想创建一个AutoMapper映射,处理映射到EncryptedBaseViewModel的任何实体之间的所有映射。获取源ID值并将其传递到目标SetId方法。

ViewModel类

class EncryptedBaseViewModel
{
    private string _encryptedId;
    public int Id {get; set; }  // to be after new mapping method is developed.

    public void SetId(int id)
    {
        _encryptedId = Encrypted(id); 
    }

    public string GetId()
    {
        return _encryptedId; 
    }
}

自动映射器示例

我有伪造攻击了这个例子,它在映射后传递了值,因为不确定该方法。 欢迎提出建议。

CreateMap<AnySource, EncryptedBaseViewModel>().ForMember(vm => nameof(vm.Id), opt => opt.Ignore()).AfterMap((src,dest) => dest.SetId(src.Id));

问题

  1. 是否可以制作通用映射器。如果是这样,我应该在指定AnySource的地方放什么?
  2. 映射是否会像任何其他特定映射一样运行? - 我想要它。
  3. 我试图避免为每个实体编写相同的映射,因为这可能导致忘记执行该操作的情况。

1 个答案:

答案 0 :(得分:1)

正如@DavidG所说,你需要一个基类或接口来源。您也可以从对象映射,但这不是非常有用,因为您仍然需要以某种方式访问​​源ID。为什么AfterMap?这是一个黑客攻击。您可以编写一个内联解析器或解析器类。 关于你的第二点,如果你想要两个映射运行(base和derived),你需要Include。 docs