Проверка атрибута в целевом свойстве внутри пользовательского AutoMapper TypeConverter - PullRequest
0 голосов
/ 27 мая 2011

У меня есть пользовательский конвертер типов, который преобразует свойства 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...
        }
    }
}

Так что этот код работает просто отлично (очевидно, есть больше проверки ошибок и переменных для удобства чтения).

Мои вопросы:

  1. Это правильный путь?Я не нашел ничего в поиске или поиске в кодовой базе AutoMapper.
  2. Как бы я проверил это?Я могу установить родительский тип назначения для ResolutionContext, который передается с небольшим количеством забавы, но не могу установить имя члена, так как все разработчики IMemberAccessor являются внутренними для AutoMapper.Это, и тот факт, что это очень уродливо для установки, делает меня не очень поддерживаемым, или я ошибаюсь.

Я использую последнюю сборку TeamCity AutoMapper,КСТАТИ.

1 Ответ

1 голос
/ 27 мая 2011

Не тестируйте это модульно, используйте интеграционный тест.Просто напишите тест отображения, который на самом деле вызывает AutoMapper, и убедитесь, что в любом случае этот конвертер типов для поддержки работает извне.

Как правило, модульные тесты в точках расширения чужого API не работают.имеют такое же значение для меня.Вместо этого я пытаюсь пройти через парадную дверь и убедиться, что я правильно настроил точку расширения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...