2016-02-23 30 views
3

如果我有這一套源類:如何建立AutoMapper映射傳遞參數的目標類的構造函數

namespace Source { 

    class CA 
    { 
     public CB B { get; set; } 
    } 

    class CB {} 

} 

在目標集合類唯一的區別是,CB接受構造CA引用(CA具有相同的結構):

namespace Destination { 

    class CA 
    { 
     public CB B { get; set; } 
    } 

    class CB 
    { 
     public CB(CA parent) { ... } 
    } 
} 

如何使用AutoMapper爲這些類構建靜態映射?我的意思是整個應用程序運行一次,而不是每個CA,CB實例。

我知道CA目的地的每一個具有映射實例之前,我可以做動態是這樣的:

var config = new ConfigurationStore(new TypeMapFactory(), MapperRegistry.Mappers); 

config.CreateMap<Source.CB, Destination.CB>() 
     .ConstructUsing((ResolutionContext cntx) => 
      new Destination.CB(instanceOfCADestination)); 

但是這並不適合我,由於性能問題的工作。

+0

您的代碼向我建議,您的類層次結構中可能會有改進。如果沒有,這對於automapper來說並不是真正的解決方案。 – MarioDS

回答

3

找到比映射前實例CA,它存儲到IMappingOperationOptions.Options.Items收集和採摘它裏面ConstructUsing

Mapper.CreateMap<Source.CB, Destination.CB>() 
     .ConstructUsing(cntx => 
       new Destination.CB((Destination.CA)cntx.Options.Items["CADestRef])); 

var destCAInstance = new Destination.CA(); 

var destCBInstance = 
     Mapper.Map<Destination.CB>(Source.CB, 
            opts => opts.Items["CADestRef"] = destCAInstance); 

這樣我就可以離開整個靜態映射沒有其他更好的辦法。 個人我不喜歡這個解決方案,但它的工作原理。如果你覺得更好,請讓我知道。

相關問題