将AutoMapper更新到5.0版会使ITypeConverter和Profiles发生冲突

时间:2016-07-03 18:24:03

标签: c# .net automapper

我已将以下配置文件从Automapper 4.2.1移植到5.0,移动了我在配置文件构造函数中现在过时的Configure()方法中所拥有的内容,并更改了{{1}的签名表达式中的方法。

Convert

现在,在这些更改之后,以下配置抛出public class AuthorModelToDtoProfile : Profile { public AuthorModelToDtoProfile() { CreateMap<Author, AuthorDto>() .ForMember(a => a.AuthorId, o => o.MapFrom(m => m.Id)) .ForMember(a => a.FullName, o => o.MapFrom(m => $"{m.FirstName} {m.Surname}")); } } public class BookModelToDtoProfile : Profile { public BookModelToDtoProfile() { CreateMap<IEnumerable<Genre>, IEnumerable<int>>() .ConvertUsing(new GenreExpression()); } } public class GenreExpression : ITypeConverter<IEnumerable<Genre>, IEnumerable<int>> { public IEnumerable<int> Convert(IEnumerable<Genre> source, ResolutionContext context) => source.Select(g => g.Id); } ,表示它不能对类型为ArgumentException的参数使用string类型的表达式:

IEnumerable<Genre>

奇怪的是,如果我评论其中一个或另一个配置文件添加,则映射器配置的创建不会再抛出任何异常,并且它会从var mapperConfiguration = new MapperConfiguration(c => { c.AddProfile<BookModelToDtoProfile>(); c.AddProfile<AuthorModelToDtoProfile>(); c.CreateMissingTypeMaps = true; }); 正确映射到Author或从AuthorDtoBook,基于我评论的内容,这让我觉得每个个人资料本身都是正确的。

我可以避免在呈现的情况下使用BookDto,但我有更复杂的表达式,其中TypeConverter有助于我的代码的可读性和可维护性。

任何人都有同样的问题或者能够看到我做错了什么?

1 个答案:

答案 0 :(得分:0)

已在5.0.2版本上修复。