我有一个通用的扩展方法版本:
public static class AutoMapperExtensions
{
public static TDestination Map<TSource, TDestination>(this IMapper mapper, TSource value,
params (string, object)[] additionalMap)
{
return mapper.Map<TSource, TDestination>(value,
opt => opt.AfterMap(
(src, dest) => additionalMap.ForEach(am =>
{
var (propertyName, value) = am;
var property = typeof(TDestination).GetProperty(propertyName);
property.SetValue(dest, value, null);
})));
}
}
在使用之前,您必须忽略额外的属性:
CreateMap<User, AuthenticateResponse>().ForMember(ar => ar.Token, opt => opt.Ignore());
使用中:
private readonly IMapper _mapper;
...
return _mapper.Map<User, AuthenticateResponse>(user, (nameof(AuthenticateResponse.Token), token));
同时你需要IEnumerable扩展:
public static void ForEach<T>(this IEnumerable<T> source, Action<T> action)
{
foreach (var item in source)
{
action(item);
}
}
或者您可以将additionalMap.ForEach更改为foreach(..){..}