AutoMapper가 Open Generics과 Inheritance을 지원하지만이 두 가지를 조합하여 사용할 수는 없습니다.AutoMapper는 Open Generics와 Inheritance를 동시에 지원합니까?
을 감안할 때
public class Foo
{
public int Id { get; set; }
}
public class Bar<T> : Foo
{
public T Value { get; set; }
}
다음 줄이 내가 시도 BarDto<EntityDto>
Mapper.Map<Bar<Entity>, BarDto<EntityDto>>(AMethodWhichReturnsABar<Entity>());
에 FooDto
에서 변환 할 수 없다는 잘못된 캐스트 예외가 발생 FooDto
및 BarDto<T> : FooDto
의 보완 클래스 가정 다음과 같은 매핑 :
Mapper.CreateMap<Entity, EntityDto>();
Mapper.CreateMap<Foo, FooDto>();
Mapper.CreateMap(typeof(Bar<>), typeof(BarDto<>));
,
및
는Mapper.CreateMap<Entity, EntityDto>();
Mapper.CreateMap<Foo, FooDto>()
.Include(typeof(Bar<>), typeof(BarDto<>));
Mapper.CreateMap(typeof(Bar<>), typeof(BarDto<>));
모두의 InvalidCastException이 발생. 내가 명시 적으로 폐쇄 일반과 같이하게되면, 작동하는 유일한 방법은 다음과 같습니다이 괜찮
Mapper.CreateMap<Entity, EntityDto>();
Mapper.CreateMap<Foo, FooDto>();
Mapper.CreateMap<Bar<Entity>, BarDto<EntityDto>>()
하지만 내가 모든 내가있을 수 있습니다 일반적인 조합을 폐쇄에 대한 매핑을 추가해야합니다 의미합니다.
이 기능은 AutoMapper에서 제공하는 기능이며 잘못된 것입니까? 아니면 내가 사용해야하는 T의 모든 조합에 대한 매핑을 추가 할 것입니까?
먼저 제네릭없이 작동하게 한 다음 다시 추가하고 얻은 것을 확인하십시오. –
[여기] (https://github.com/AutoMapper/AutoMapper/blob/eb1a445b373acfac3895e9fd308c43e070db546e/src/UnitTests/MappingInheritance/ShouldSupportOnlyDestinationTypeBeingDerived.cs)는 일부 예입니다. –
@LucianBargaoanu 제네릭을 제거하고 Value 속성을 Entity 및 EntityDto로 만들면 원래 시도한 두 매핑 중 하나와 함께 작동합니다. T를 다시 넣으면 같은 오류가 발생합니다. – thudbutt