簡體   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