Я использую AutoMapper v6.1.1 для сопоставления сущностей модели моего расширенного домена с некоторыми плоскими DTO.
Я инициализирую конфигурацию в статическом классе, который возвращает IMapper
, который добавляет нашсопоставляет профили и настраивает PreserveReferences()
для всех наших карт.
Я объявил пользовательский атрибут для подмножества моих исходных элементов сущности (это относится только к элементам типа string
).
Я хотел бы добавить глобальную конфигурацию в AutoMapper, которая позволяет мне вызывать метод расширения для любых членов с этим атрибутом во время сопоставления.
Каждый из этих элементов будет в конечном итоге иметь множество различных типов назначения, поэтому я подумал, что это будет простой способ обеспечить всегда запуск метода расширения для этих элементов без явной настройки его для каждой новой карты.
Придуманный пример следует.
Исходный объект:
public class SomeEntity
{
public string PropertyWithoutCustomAttribute { get; set; }
[CustomAttribute]
public string PropertyWithCustomAttribute { get; set; }
}
Целевой объект:
public class SomeEntityDto
{
public string PropertyWithoutCustomAttribute { get; set; }
public string PropertyWithCustomAttribute { get; set; }
}
Метод расширения:
public static string AppendExclamationMark(this string source)
{
return source + "!";
}
Если мой исходный экземпляр определен со следующими значениями:
var source = new SomeEntity
{
PropertyWithoutCustomAttribute = "Hello",
PropertyWithCustomAttribute = "Goodbye"
};
Я ожидаю, что следующие утверждения будут истинными:
destination.PropertyWithoutCustomAttribute == "Hello"
destination.PropertyWithCustomAttribute == "Goodbye!"
Я полностью застрял (и немного борюсь с документацией), но я думаю, что самое близкое, что я получил, это:
cfg.ForAllPropertyMaps(
map => map.SourceType == typeof(string) &&
map.SourceMember
.GetCustomAttributes(
typeof(CustomAttribute),
true)
.Any(),
(map, configuration) => map.???);
Любая помощь будет принята с благодарностью, дажеесли сказать мне, что это ужасная идея или это невозможно.