Niedawno popisałem troszkę o czasie UTC i dlaczego tylko taka reprezentacja czasu powinna znajdować drogę do bazy danych. A teraz… w jaki sposób przygotować datę do podróży w drugą stronę, czyli do użytkownika.
Z Automapperem jest to zadanie doprawdy banalne, wystarczy odpowiedni Type Converter:
1: public class UtcToLocalTimeConverter : TypeConverter<DateTime, DateTime> 2: { 3: protected override DateTime ConvertCore(DateTime source) 4: { 5: string targetTimeZoneName = Config.TargetTimeZone; 6: 7: TimeZoneInfo targetTimeZone = TimeZoneInfo.FindSystemTimeZoneById(targetTimeZoneName); 8: 9: return TimeZoneInfo.ConvertTimeFromUtc(source, targetTimeZone); 10: } 11: }
Teraz tylko rejestracja w konfiguracji…
1: Mapper.CreateMap<DateTime, DateTime>().ConvertUsing<UtcToLocalTimeConverter>();
i już, automagicznie wszystkie nasze DTO przesyłane do użytkownika będą miały odpowiednią dla niego datę. A system nadal posiada wszelkie zalety "systemu przechowującego datę w UTC", bez żadnego dodatkowego wysiłku z naszej strony!
Hej Maciej,
rewelacyjne rozwiązanie, sam już od jakiegoś czasu korzystam z AutoMapper’a, ale zawsze brakowało mi eleganckiego rozwiązania na wstrzykiwania zależności podczas mapowania.
Super, dzięki!
Pozdrawiam,
Marek
Heh,
komentarz miał iść pod Twój post:
http://www.maciejaniserowicz.com/post/2010/03/12/Automapper-a-Dependency-Injection.aspx
:)