У меня есть два объекта одного типа. Я хочу условно скопировать значения из objectA в objectB, используя Automapper (по сути, создавая только аддитивную копию между двумя объектами одного типа). Я смотрел на условное отображение и другие типы конвертеров, но я не хочу указывать это для каждого свойства объекта. Я хотел бы скопировать каждое свойство, используя точно такую же логику.
- Если исходное свойство имеет значение NULL, не копировать
- Если цель уже имеет значение, не копируйте
- Если цель имеет значение NULL, скопировать из источника
- Если свойства источника и цели являются списком, то в список целей могут быть добавлены только отсутствующие элементы, поскольку цель может содержать элементы, отсутствующие в списке источников, которые должны остаться.
Я знаю, что мог бы создать конфигурацию, указав эти правила для каждого отдельного свойства, но я хотел бы знать, возможно ли определить эти правила глобально для каждого сопоставляемого свойства, чтобы я мог сделатьодна общая версия этой конфигурации сопоставления.
Мне кажется, что все, что мне нужно, - это возможность указать функцию, в которой autopper передает как исходные, так и целевые значения, и я могу просто принять решение на основе равенства между ними, используя вышеупомянутую логику.
public static TOutput CopyAll<TInput, TOutput>(TInput input, TOutput output)
{
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<TInput, TOutput>().ForAllMembers(o => o.Condition((src, dest, srcValue, destValue) =>
{
return (srcValue != null && destValue == null);
}));
});
IMapper mapper = config.CreateMapper();
return mapper.Map<TInput, TOutput>(input, output);
}