使用AutoMapper映射静态类

时间:2014-12-05 06:16:09

标签: c# automapper

有没有办法用AutoMapper映射静态类?

情景是这样的。有一个名为UserIdentity的静态类,它包含属性。我想将UserIdentity类值映射到名为UserDTO的无静态类。

当我尝试

AutoMapper.Mapper.CreateMap<UserIdentity, UserDTO>();

有一个错误说,

static type cannot be used as type arguments

现在任何人都可以向我解释这个场景,是否可以实现。有没有一种方法可以在不使用Automapper的情况下映射静态类。否则我必须手动完成。

2 个答案:

答案 0 :(得分:1)

执行此操作的唯一方法是使用虚拟类来执行无操作映射。然后你可以使用自定义类型转换器或映射函数,或者只是做这样的事情:

Mapper.CreateMap<Dummy, Dest>()
  .AfterMap((src, dest) => 
     { 
         dest.Name = UserIdentity.Name;
         dest.Id = UserIdentity.Id;
         //.... etc..
     });

答案 1 :(得分:0)

不幸的是,您无法在静态类上使用automapper

此外,还有一组非常有限的情况,您可以参考静态类类型,这也会使其他方法变得困难

静态类可防止不当使用,因此在几乎所有情况下,您都不能在通常需要类型实例的情况下使用它们,并且包含类型参数。

我能看到实现所需结果的唯一方法是通过字段映射功能创建一个字段

尽管你可以强迫automapper使用一个虚拟类,但你仍然在逐字段地进行映射,我的投票是为了降低复杂性并使用类似下面的内容

  public static SomeDTO CreateDTO()
  {
     return new SomeDTO
        {
            dest.Name = UserIdentity.Name;
            dest.Id = UserIdentity.Id;
            ect..
        }
  }