I will never ever change even a single line in my code simply because the authors of AutoMapper decided that its not a “right” thing to do for whatever “reason”.
Quick and dirty solution, makes sense to add a unit test:
using AutoMapper.Internal;
using AutoMapper.Configuration;
public static class AutoMapperExtensions
{
private static readonly PropertyInfo TypeMapActionsProperty = typeof(TypeMapConfiguration).GetProperty("TypeMapActions", BindingFlags.NonPublic | BindingFlags.Instance);
// not needed in AutoMapper 12.0.1
private static readonly PropertyInfo DestinationTypeDetailsProperty = typeof(TypeMap).GetProperty("DestinationTypeDetails", BindingFlags.NonPublic | BindingFlags.Instance);
public static void ForAllOtherMembers<TSource, TDestination>(this IMappingExpression<TSource, TDestination> expression, Action<IMemberConfigurationExpression<TSource, TDestination, object>> memberOptions)
{
var typeMapConfiguration = (TypeMapConfiguration)expression;
var typeMapActions = (List<Action<TypeMap>>)TypeMapActionsProperty.GetValue(typeMapConfiguration);
typeMapActions.Add(typeMap =>
{
var destinationTypeDetails = (TypeDetails)DestinationTypeDetailsProperty.GetValue(typeMap);
foreach (var accessor in destinationTypeDetails.WriteAccessors.Where(m => typeMapConfiguration.GetDestinationMemberConfiguration(m) == null))
{
expression.ForMember(accessor.Name, memberOptions);
}
});
}
}