首页 > 解决方案 > AutoMapper 不适用于协变接口

问题描述

using AutoMapper;

namespace MapTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Mapper.Initialize(cfg =>
            {
                cfg.CreateMap<X, Interf<object>>()
                    .ForMember(dest => dest.B, opt => opt.MapFrom(src => src.K))
                    .ForMember(dest => dest.A, opt => opt.Ignore());
            });

            X x = new X { K = 1 };
            Interf<object> instance = new Cl<Y> { A = new Y() };
            Mapper.Map(x, instance);
        }
    }

    class Cl<T> : Interf<T>
    {
        public T A { get; set; }
        public int B { get; set; }
    }

    interface Interf<out T>
    {
        T A { get; }
        int B { get; set; }
    }

    class X
    {
        public int K { get; set; }
    }

    class Y
    {
    }
}

此代码将导致异常Mapper.Map(x, instance),因为 AutoMapper 似乎无法找到X -> Interf<object>映射到Cl<Y>对象的映射,即使我给它一个instance确实是 type的提示Interf<object>。如果我将CreateMap行更改为:

cfg.CreateMap<X, Interf<Y>>()

它不再崩溃,因为它可以解析Cl<Y>Interf<Y>.

有没有什么办法解决这一问题?

标签: c#automappercovariance

解决方案


推荐阅读