2012-04-17 138 views
1

我有一個包含成員變量兩種語言領域模型,是這樣的:Automapper條件語言​​映射

public class Resource 
{ 
    public string SwedishName; 
    public string EnglishName; 
} 

爲了展示我有一個簡化的模型,被輸送到一個JSON序列:

[JsonObject] 
public class JsonResource 
{ 
    [JsonProperty] 
    public string Name; 
} 

這些映射與automapper像這樣:

Mapper.CreateMap<Resource, JsonResource>() 
    .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.SwedishName)); 

我的問題是,如果這可以用更有條件的方式來完成,具體取決於要求哪種語言?我最初的想法,是沿着這些線:

string lang = "en"; 
json = Mapper.Map<Resource, JsonResource>(resource, lang) 

雖然,似乎不可能有幾個相同類型的映射?

目前林傾向於,只是定義爲其他語言的另一個相同的演示模型:

if (lang == "en") 
    json = Mapper.Map<Resource, EnglishJsonResource>(resource) 
else 
    json = Mapper.Map<Resource, JsonResource>(resource) 

這是一個可行的解決方案,或者是有沒有更好的辦法?

回答

4

我不會創建單獨的類。使用AfterMap

Mapper.CreateMap<Resource, JsonResource>() 
.AfterMap((r,b) => r.Name = isEnglish ? b.EnglishName : b.SwedishName); 

isEnglish是在您的應用程序的條件,但是你需要使用它。

+1

或者您可以在.MapFrom()中實現同樣的效果: .ForMember(dest => dest.Name,opt => opt.MapFrom(src => isEnglish?src.EnglishName:src.SwedishName)) – Dima 2012-04-17 10:28:10

0

您可以創建兩個不同的類EngMapper和SimpleMapper,它們將使用initMapping方法實現IMapper接口,例如,您可以創建工廠以根據您的語言獲取正確的映射器。所以最後你的映射將被分開爲不同的語言(這在我看來更好)。