2017-09-13 1 views
1

AutoMapper가 Open GenericsInheritance을 지원하지만이 두 가지를 조합하여 사용할 수는 없습니다.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에서 변환 할 수 없다는 잘못된 캐스트 예외가 발생 FooDtoBarDto<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의 모든 조합에 대한 매핑을 추가 할 것입니까?

+0

먼저 제네릭없이 작동하게 한 다음 다시 추가하고 얻은 것을 확인하십시오. –

+0

[여기] (https://github.com/AutoMapper/AutoMapper/blob/eb1a445b373acfac3895e9fd308c43e070db546e/src/UnitTests/MappingInheritance/ShouldSupportOnlyDestinationTypeBeingDerived.cs)는 일부 예입니다. –

+0

@LucianBargaoanu 제네릭을 제거하고 Value 속성을 Entity 및 EntityDto로 만들면 원래 시도한 두 매핑 중 하나와 함께 작동합니다. T를 다시 넣으면 같은 오류가 발생합니다. – thudbutt

답변

0

내 질문에 대한 대답은 '예'입니다. AutoMapper 4.0.4를 사용하여 테스트했기 때문에 당황스럽지 않은 이유가 있습니다. 6.1.1를 사용하여 다음을 수행 할 수 있으며 예상대로 작동합니다

MapperConfiguration config = new MapperConfiguration(c =>  
{  
    c.CreateMap<Entity, EntityDto>(); 
    c.CreateMap(typeof(Foo), typeof(FooDto)); 
    c.CreateMap(typeof(Bar<>), typeof(BarDto<>));; 
}); 

config.AssertConfigurationIsValid();  
var mapper = config.CreateMapper(); 

BarDto<EntityDto> result = mapper.Map<Bar<Entity>, BarDto<EntityDto>>(AMethodWhichReturnsABar<Entity>()); 

내 질문을 왼쪽으로 대답 한, 내가 찾고 있던 원래 때, 나는 명시 적으로 언급이 어디서나 볼 수 없었다 내가 도움을 요청했다.

관련 문제