我有一个具有嵌套类的Main类。我使用Mapper类
成功地使用了它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());
现在,当我将此映射移动到我的Profile类时,我不得不将上面的行更改为以下内容:
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注入到我的控制器的构造函数中。之前我只是使用Static Mapper类,它曾经在我的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 :(得分:0)
正确的方法是使用custom type converter,在其中注入映射引擎本身。并在个人资料声明中使用ConstructServicesUsing。
假设你使用了一些IoC容器,并且你在转换器中注册了映射引擎和自定义类型转换器,你将使用engine.Map而不是静态Mapper。