2016-07-07 91 views
0

我試圖映射多種類型,約50到其他類型(其中50)他們是1對一,但我想從接口映射到具體類型。映射多個派生類型

相關代碼例如:

using AutoMapper; 
using System; 
using System.Collections.Generic; 

namespace ConsoleApplication1 
{ 
    internal class Program 
    { 
     public interface IAnimalBO { } 
     public interface IBearBO : IAnimalBO { } 
     public interface ITigerBO : IAnimalBO { } 

     public static void Main() 
     { 
      var config = new MapperConfiguration(cfg => 
      { 
       // Base class mapping.. 
       cfg.CreateMap<IAnimalBO, AnimalVM>(); 


       cfg.CreateMap<ITigerBO, TigerVM>(); 
       cfg.CreateMap<IBearBO, BearVM>(); 
      }); 

      var mapper = config.CreateMapper(); 

      // Configure AutoMapper 

      var businessObjects = new List<IAnimalBO> 
      { 
       new TigerBO(), 
       new BearBO() 
      }; 

      var results = mapper.Map<IEnumerable<AnimalVM>>(businessObjects); 

      foreach (var result in results) 
      { 
       Console.WriteLine(result.GetType().Name); 
      } 
      Console.ReadKey(); 
     } 

     public class AnimalVM { } 
     public class BearBO : IBearBO { } 
     public class BearVM : AnimalVM { } 
     public class TigerBO : ITigerBO { } 
     public class TigerVM : AnimalVM { } 
    } 
} 

預期輸出應爲:

TigerVM

BearVM

但實際輸出是:

AnimalVM

AnimalVM

我不知道如何設置automapper映射這些類型。

如果我讚揚基線映射:

   // Base class mapping.. 
       // cfg.CreateMap<IAnimalBO, AnimalVM>(); 

然後我得到以下異常:

錯誤映射類型。

映射類型:

List'1 - > IEnumerable'1 System.Collections.Generic.List'1 [[ConsoleApplication1.Program + IAnimalBO,ConsoleApplication1,版本= 1.0.0.0,文化=中性公鑰= NULL] - > System.Collections.Generic.IEnumerable'1 [ConsoleApplication1.Program + AnimalVM,ConsoleApplication1,版本= 1.0.0.0,文化=中立,公鑰=空]

+0

更新的問題,但任何人在這個方面的經驗會明白的問題。 –

回答

2

你想用包括<>,它從類中選擇派生最多的映射。

更多信息請致電Mapping Inheritance

var config = new MapperConfiguration(cfg => 
{ 
    // Base class mapping.. 
    cfg.CreateMap<IAnimalBO, AnimalVM>() 
     .Include<ITigerBO, TigerVM>() 
     .Include<IBearBO, BearVM>(); 
    cfg.CreateMap<ITigerBO, TigerVM>(); 
    cfg.CreateMap<IBearBO, BearVM>(); 
}); 

enter image description here

+0

啊,是的,我忘了雙映射......呃 –