Глобальное применение преобразователя значений с AutoMapper

Я пытаюсь сделать так, чтобы AutoMapper позаботился о локализации всех свойств DateTime в наших моделях представления для нас. Мы используем UTC повсюду в нашей системе и храним все в формате UTC в базе данных, но мы хотели бы автоматически преобразовать это в часовой пояс пользователя для отображения.

После просмотра всех вариантов я остановился на ValueResolver. Вот суть резолвера:

public class LocalizedDateTimeFormatter : ValueResolver<DateTime, DateTime>
{
    protected override DateTime ResolveCore(DateTime source)
    {
        // get company

        return company.TimeZone.ConvertFromUtc(source);
    }
}

Я настраиваю отображение следующим образом:

Mapper.CreateMap<Entity, Model>()
    .ForMember(dest => dest.Foo, opt => opt.ResolveUsing<LocalizedDateTimeFormatter>()
                                            .FromMember(src => src.Foo));

Все работает нормально, и я доволен. Однако в идеале мы хотели бы, чтобы все свойства DateTime в модели представления использовали этот преобразователь по умолчанию. Я начал осмысливать свойства модели представления, выбирая DateTime, и используя перегрузки ForMember и FromMember, которые принимают имена строк свойств, но это казалось ... некрасивым. Плюс дублирование логики построения вложенных имен свойств в AutoMapper могло бы быстро выйти из строя.

Вопрос: Есть ли простой способ указать AutoMapper глобально использовать ValueResolver, подобный этому? Чтобы сказать: «Каждый раз, когда вы сопоставляете свойство DateTime в источнике со свойством DateTime в пункте назначения, используйте этот преобразователь»?

Я просмотрел тесты AutoMapper и не нашел ничего, что бы работало.

Спасибо!

17
задан Darrell Mozingo 14 April 2011 в 16:22
поделиться