2015-06-19 142 views
1

我有一個具有嵌套類的主類。我已成功地使用此映射使用Mapper類AutoMapper配置文件:展平dto映射

public class Main 
{ 
    public string Name { get; set; } 
    public List<QuantityLocation> NC { get; set; } 
} 

public class NestedClass 
{ 
    public decimal B { get; set; } 
    public string A { get; set; } 
} 

public class Flattened 
{ 
    public string Name { get; set; } 

    public string A { get; set; } 
    public decimal B { get; set; } 
} 

使用Mapper類進行映射,如下所示。

Mapper.CreateMap<NestedClass, Flattened>(); 
    Mapper.CreateMap<Main, Flattened>(); 
    Mapper.CreateMap<Main, List<Flattened>>() 
     .ConvertUsing(i => 
       i.NC.Select(
        flat => 
        { 
         var flatList = Mapper.Map<Flattened>(i); 
         Mapper.Map(flat, flatList); 
         return flatList; 
        }).ToList()); 

現在,當我提出這個映射到我的個人資料類,我不得不改變上面這下面幾行:

CreateMap<NestedClass, Flattened>(); 
CreateMap<Main, Flattened>(); 
CreateMap<Main, List<Flattened>>() 
    .ConvertUsing(i => 
      i.NC.Select(
       flat => 
       { 
        var flatList = Mapper.Map<Flattened>(i); 
        Mapper.Map(flat, flatList); 
        return flatList; 
       }).ToList()); 

我現在面臨的問題是如何下面這兩條線的轉換上面的代碼片段。

   var flatList = Mapper.Map<Flattened>(i); 
       Mapper.Map(flat, flatList); 

你看到我注入Mapper.Engine到我的控制器的構造函數。早些時候,我只是使用靜態映射器類來調用我的global.asax。現在我收到如下所示的錯誤。

Missing type map configuration or unsupported mapping. 

Mapping types: Main -> List`1 MyProj.Main -> System.Collections.Generic.List`1[[MyProj.Flattened, MyProj, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] 

Destination path: List`1 

Source value: MyProj.Main 
+0

如何設置'automapper'進行注入?你是否使用'Profile'來配置映射? – Ric

+0

是的,我正在使用配置文件來配置映射。 – user20358

回答

0

正確的方式做是使用custom type converter,在其中注入映射引擎本身。並在個人資料聲明中使用ConstructServicesUsing

假設您使用了一些IoC容器,並且您已在其中註冊映射引擎和自定義類型轉換器,您將使用engine.Map代替靜態映射器。