1
我可以看到,AutoMapper支持Open Generics和Inheritance,但我無法讓它與這兩者結合使用。AutoMapper是否支持同時打開泛型和繼承?
鑑於
public class Foo
{
public int Id { get; set; }
}
public class Bar<T> : Foo
{
public T Value { get; set; }
}
,並假設互補類的FooDto
和BarDto<T> : FooDto
然後將下面的行拋出一個無效的轉換異常說,它不能從FooDto
轉換爲BarDto<EntityDto>
Mapper.Map<Bar<Entity>, BarDto<EntityDto>>(AMethodWhichReturnsABar<Entity>());
我曾嘗試映射如下:
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提供了這個功能嗎?我只是做錯了嗎?或者我堅持爲每個我需要使用的組合添加一個映射?
首先讓它在沒有泛型的情況下工作,然後將它們添加回來,看看你得到了什麼。 –
[Here](https://github.com/AutoMapper/AutoMapper/blob/eb1a445b373acfac3895e9fd308c43e070db546e/src/UnitTests/MappingInheritance/ShouldSupportOnlyDestinationTypeBeingDerived.cs)就是一些例子。 –
@LucianBargaoanu如果我刪除泛型並將Value屬性設置爲Entity和EntityDto,那麼它可以與我最初嘗試的兩種映射中的任何一種一起使用。將T加回來導致相同的錯誤。 – thudbutt