Я пытаюсь, чтобы 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 и не видел ничего, что могло бы работать.
Спасибо!