【发布时间】:2014-02-12 12:04:53
【问题描述】:
我想指定一个映射,以便从“Source”到“Destination”的所有映射都作为“Destination”的派生类返回
[Test]
public void Map_SourceToDestinationAsDerivedType_ReturnsDerivedType()
{
// arrange
AutoMapper.Mapper.CreateMap<Source, Destination>()
.CreateAs<ActualDestination>() // psedu code
.ForMember(dst => dst.Transformed, opt => opt.ResolveUsing(src => src.Property));
var source = new Source{Property = "hi mom" };
// act
var destination = AutoMapper.Mapper.Map<Destination>(source);
// assert
Assert.That(destination, Is.InstanceOf<ActualDestination>());
}
public class Source
{
public string Property { get; set; }
}
public class Destination
{
}
public class ActualDestination : Destination
{
public string Transformed { get; set; }
}
【问题讨论】:
-
为什么不为派生类型
Mapper.CreateMap<Source, ActualDestination>()创建一个映射并在映射中使用它:AutoMapper.Mapper.Map<ActualDestination>(source);? -
如果是这样的话,你真的认为我会问一个问题吗?
-
Automapper 不支持这一点,最接近你能得到的就是写这样的东西:
AutoMapper.Mapper.CreateMap<Source, ActualDestination>() .ForMember(dst => dst.Transformed, opt => opt.ResolveUsing(src => src.Property)); AutoMapper.Mapper.CreateMap<Source, Destination>() .ConstructUsing((Source s) => AutoMapper.Mapper.Map<ActualDestination>(s)); -
谢谢,把它写下来作为答案,我会接受的
-
好吧,好吧,但我不明白你为什么不写
AutoMapper.Mapper.Map<ActualDestination>(source);?即使使用我的“解决方案”,您仍然只能将每个Source实例映射到ActualDestination那么为什么要在映射中使用派生类型?
标签: automapper