2014-12-05 174 views
1

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

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

当我试图

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

有一个错误的说法,

static type cannot be used as type arguments 

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

回答

0

不幸的是你不能使用automapper静态类

此外,还有一组非常有限的,你可以参考静态类类型的情况下,这也将使其他方法难以

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

我可以看到,以达到您想要的结果的唯一方法是创建由字段映射功能,你的自我

全部尽管你可以强迫automapper使用虚拟类中的字段,你还在通过字段映射场反正,我的票是为了降低复杂性,只是使用类似下面

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

你可以给我一个示例代码,以获得一个创建字段映射函数的想法吗? – Wiki 2014-12-05 09:36:25

1

只有这样,才能做到这一点是使用一个虚拟的类来执行无操作映射。然后,您可以使用自定义类型转换器或映射功能或简单地做这样的事情:

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

所以,解释,不,你不能。而在这种情况下,为什么要包含AutoMapper呢?无论如何,如果你最终要手动绘制属性。 – 2015-02-09 16:29:22

+0

@AndrewTheken - 好吧,如果您已经在使用AutoMapper处理其他事情,为了保持一致性,使用类似模式保留所有映射是有意义的,即使这意味着要采取一些措施来使某些类型能够工作。 – 2015-02-09 16:34:59

+0

由于应有的尊重,我认为这是一个风格问题,我想我不同意添加不做任何事情的代码,即使它“匹配样式”有助于可读性,但原始C#将不那么“神奇” “。 – 2015-02-09 17:19:06