У меня есть пользовательский конвертер типов, который преобразует свойства UTC DateTime в местное время компании (об этом говорили здесь: Глобальное применение преобразователя значений с помощью AutoMapper ).
Я бы хотел сейчасэтот конвертер может работать только в том случае, если свойство модели представления помечено пользовательским атрибутом DisplayInLocalTime
.
Внутри преобразователя типов, если я реализую интерфейс raw ITypeConvert<TSource, TDestination>
, я могу проверить,Конвертируемое свойство модели целевого представления имеет атрибут:
public class LocalizedDateTimeConverter : ITypeConverter<DateTime, DateTime>
{
public DateTime Convert(ResolutionContext context)
{
var shouldConvert = context.Parent.DestinationType
.GetProperty(context.MemberName)
.GetCustomAttributes(false)[0].GetType() == typeof(DisplayInLocalTimeAttribute);
if (shouldConvert) {
// rest of the conversion logic...
}
}
}
Так что этот код работает просто отлично (очевидно, есть больше проверки ошибок и переменных для удобства чтения).
Мои вопросы:
- Это правильный путь?Я не нашел ничего в поиске или поиске в кодовой базе AutoMapper.
- Как бы я проверил это?Я могу установить родительский тип назначения для
ResolutionContext
, который передается с небольшим количеством забавы, но не могу установить имя члена, так как все разработчики IMemberAccessor
являются внутренними для AutoMapper.Это, и тот факт, что это очень уродливо для установки, делает меня не очень поддерживаемым, или я ошибаюсь.
Я использую последнюю сборку TeamCity AutoMapper,КСТАТИ.