C# 使用AutoMapper映射静态类

C# 使用AutoMapper映射静态类,c#,automapper,C#,Automapper,有没有办法用AutoMapper映射静态类 情况是这样的。有一个名为UserIdentity的静态类,它包含属性。我想将UserIdentity类值映射到名为UserDTO的非静态类 当我试着 AutoMapper.Mapper.CreateMap<UserIdentity, UserDTO>(); 现在有谁能解释一下这个场景,它是否可以实现。有没有一种不用Automapper映射静态类的方法。否则我必须手动操作。不幸的是,您不能在静态类上使用automapper 此外,您可以引用

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

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

当我试着

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

现在有谁能解释一下这个场景,它是否可以实现。有没有一种不用Automapper映射静态类的方法。否则我必须手动操作。

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

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

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

我能看到的实现所需结果的唯一方法是自己创建一个逐字段映射函数

尽管您可以强制automapper使用一个虚拟类,但您仍然在一个字段一个字段地映射,我的建议是降低复杂性,只需使用如下内容

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

实现这一点的唯一方法是使用虚拟类来执行无操作映射。然后,您可以使用自定义类型转换器、映射函数或简单地执行以下操作:

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

您能给我一个示例代码,让我了解创建逐字段映射函数的概念吗?因此,换言之,不,您不能。在这种情况下,为什么要包括AutoMapper?如果你最终还是要手工映射属性。@AndrewTheken-好吧,如果你已经在为其他事情使用AutoMapper,那么为了保持一致性,让所有映射都使用类似的模式是有意义的,即使这意味着要做一些变通以使某些类型工作。请尊重,我认为这是风格的问题,我想我只是不同意添加没有任何作用的代码,即使它“符合风格”有助于提高可读性,而原始C#将不再那么“神奇”。@AndrewTheken-什么都不做?它显然起了作用。。。我不确定你的观点是什么。如果您的替代方案是用混乱的映射逻辑填充控制器,而不是将其抽象到单个位置,那么。。嗯,我想我们对什么是“风格”有不同的看法。对不起,我应该用一种不会让它升级的方式说这些,我不想就此与你争论。我觉得你是在对我说“填充你的控制器”,因为我没有这样的暗示——你可以很容易地用静态方法编写这个映射,并在整个应用程序中共享它。我的观点是,“使用”automapper为一致性增加了不必要的间接性,事实上,根据定义,这种情况与automapper的其他用途不同。
Mapper.CreateMap<Dummy, Dest>()
  .AfterMap((src, dest) => 
     { 
         dest.Name = UserIdentity.Name;
         dest.Id = UserIdentity.Id;
         //.... etc..
     });