Automapper中的通用映射

时间:2014-10-22 14:00:00

标签: c# wcf automapper dto

我试图使用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有关源的信息。

请指教!!!

1 个答案:

答案 0 :(得分:0)

看起来你应该能够从界面而不是服务本身进行映射。

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

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

articular可能会更多地表达我的建议

如果返回与界面不同,那么我建议实施适配器模式以使它们统一。