2016-01-19 77 views
0

我有以下原始類結構:如何用多繼承映射接口?

public interface IMapFromElement 
{ 
    string Prop { get; } 
} 

public interface IMapFromElementDerived : IMapFromElement 
{ 
    string Prop2 { get; } 
} 

public interface IMapFromElement2 : IMapFromElement 
{ 
} 

public interface IMapFromElementDerived2 : IMapFromElementDerived, IMapFromElement2 
{ 
} 

public abstract class MapFromElement : IMapFromElement2 
{ 
    public string Prop { get; set; } 
} 


public class MapFromElementDerived : MapFromElement, IMapFromElementDerived2 
{ 
    public string Prop2 { get; set; } 
} 

我試圖把它們映射到:

public class MapTo 
{ 
    public IMapToElementWritable Element { get; set; } 
} 

public interface IMapToElementWritable : IMapFromElement 
{ 
    new string Prop { get; set; } 
} 

public interface IMapToElementWritableDerived : IMapFromElementDerived, IMapToElementWritable 
{ 
    new string Prop2 { get; set; } 
} 

public abstract class MapToElement : IMapToElementWritable 
{ 
    public string Prop { get; set; } 
} 

public class MapToElementDerived : MapToElement, IMapToElementWritableDerived 
{ 
    public string Prop2 { get; set; } 
} 

我試圖把它們配圖:

var from = new MapFrom 
{ 
    Element = new MapFromElementDerived {Prop = "qwerty", Prop2 = "asdf"} 
}; 
Mapper.Initialize(
    cfg => 
    { 
     cfg.CreateMap<IMapFrom, MapTo>(); 
     cfg.CreateMap<IMapFromElement, IMapToElementWritable>(); 

     cfg.CreateMap<IMapFromElementDerived, IMapToElementWritableDerived>() 
      .IncludeBase<IMapFromElement, IMapToElementWritable>() 
      .ConstructUsing((ResolutionContext item) => new MapToElementDerived()); 

     cfg.Seal(); 
    }); 
Mapper.AssertConfigurationIsValid(); 

var result = Mapper.Map<MapTo>(from); 

我預期的那樣,因爲它的Element屬性值,所以我將使用MapToElementDerived作爲輸出MapTo。但是我真的無法實現它 - Automapper改爲創建IMapToElementWritable的代理。看起來像IncludeBase不起作用(我也試過,包括也,但它沒有幫助)。也許我只是寫錯誤的配置。

回答