2015-06-19 140 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代替静态映射器。