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
действительно типа Interf<object>
. Если я изменю строку CreateMap
на:
cfg.CreateMap<X, Interf<Y>>()
больше не падает, потому что может разрешить Cl<Y>
в Interf<Y>
.
Есть ли способ это исправить?