簡體   English   中英

AutoMapper配置文件:展平dto以進行映射

[英]AutoMapper Profiles: flattening a dto for mapping

我有一個嵌套類的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

正確的方法是使用自定義類型轉換器 ,在其中注入映射引擎本身。 並在您的配置文件聲明中使用ConstructServicesUsing

假設您使用了一些IoC容器,並且已經在其中注冊了映射引擎和自定義類型轉換器,則在轉換器內部,您將使用engine.Map而不是靜態Mapper。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM