0

我正在尝试映射多种类型,大约 50 种到其他类型(其中 50 种)它们是一对一的,但我想从接口映射到具体类型。

相关代码示例:

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 { }
    }
}

预期的输出应该是:

老虎机

小熊虚拟机

但实际输出是:

动物虚拟机

动物虚拟机

我不确定如何设置自动映射器来映射这些类型。

如果我推荐基线映射:

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

然后我得到以下异常:

错误映射类型。

映射类型:

List'1 -> IEnumerable'1 System.Collections.Generic.List'1[[ConsoleApplication1.Program+IAnimalBO, ConsoleApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] -> System.Collections.Generic。 IEnumerable'1[[ConsoleApplication1.Program+AnimalVM, ConsoleApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]

4

1 回答 1

3

您想使用include<>从类中选择最派生的映射。

映射继承的更多信息。

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>();
});

在此处输入图像描述

于 2016-07-07T19:09:55.950 回答