2016-07-07 19 views
0

私は複数の型をマップしようとしていますが、約50種類(50種類)は1対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、文化=中立、なPublicKeyToken = NULL]] - > System.Collections.Generic.IEnumerable'1 [[ConsoleApplication1.Program + AnimalVM、ConsoleApplication1、バージョン= 1.0.0.0、カルチャニュートラル、PublicKeyToken = = null]]

あなたが使用したい
+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

ああ、私は二重のマッピングを忘れていた... ugh –

関連する問題