我已将以下配置文件从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
或从AuthorDto
到Book
,基于我评论的内容,这让我觉得每个个人资料本身都是正确的。
我可以避免在呈现的情况下使用BookDto
,但我有更复杂的表达式,其中TypeConverter
有助于我的代码的可读性和可维护性。
任何人都有同样的问题或者能够看到我做错了什么?
答案 0 :(得分:0)
已在5.0.2版本上修复。