繁体   English   中英

Automapper中的通用映射

[英]Generic mapping in Automapper

我试图使用自动映射器将数据协定转换为客户端对象,反之亦然。以减少代码行并使之简化,我想动态创建映射。 可以说我正在调用5个不同的服务,每个服务将返回与Employee类似的对象,但数据将有所不同(如果我需要Microsoft的员工信息,我将调用Microsoft服务,或者如果我想要IBM员工详细信息,我将调用IBM服务,依此类推)。

我的对象如下所示。

Public class Employee
{
Public string Id{get;set;}
Public string Division{get;set;}
Public PersonDetails person{get;set;}
}
Public class PersonDetails
{
Public string Name{get;set;}
Public string Email{get;set;}
Public string contact{get;set;}
}

使用Automapper,我可以在下面写一些东西。

 Mapper.CreateMap<Service1. PersonDetails, PersonDetails >();
   Mapper.CreateMap<Service1.Employee, Employee>()
        .ForMember(DEST=>DEST. PersonDetails,M=>M.MapFrom(Q=>Q. PersonDetails));
   Mapper.CreateMap<Service2. PersonDetails, PersonDetails >();
   Mapper.CreateMap<Service2.Employee, Employee>()
         .ForMember(DEST=>DEST.PersonDetails,M=>M.MapFrom(Q=>Q. PersonDetails));

但是自从我调用5种不同的服务以来,我不得不写5次相同的相似逻辑。

有什么办法可以动态地做到这一点,这意味着我想在运行时告诉Automapper有关源的信息。

请指教!!!

看起来您应该能够从接口而不是服务本身进行映射。

public interface IEmployeeServiceResponce
{
    Employee {get;}
    PersonDetails{get;}
}

然后让每个服务实现该接口。

这个关节可能更能表达我的建议

如果返回的信息与接口的信息不同,那么我建议实现Adapter Patter来统一它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM