У меня есть SearchService
с методом Search()
, который извлекает IEnumerable<Search>
из хранилища.Эти Search
объекты поступают непосредственно из LINQ To SQL.Затем я использую AutoMapper для преобразования этих Search
типов в SearchModel
типы (и позже они, например, передаются в контроллер).
var searches = searchRepository.GetByUserID(userID);
var models = Mapper.Map<IEnumerable<Search>, IEnumerable<SearchModel>>(searches);
Проблема в том, что Search
имеетсвойство DateCreated
, которое является UTC DateTime
.Мне нужно исправить дату в зависимости от вошедшего в систему пользователя для своего местного часового пояса.Я мог бы сделать это с помощью foreach
внутри службы, например:
var searches = searchRepository.GetByUserID(userID);
foreach (var search in searches)
{
search.DateCreated = search.DateCreated.ToTimezone(userTimezoneID);
}
var models = Mapper.Map<IEnumerable<Search>, IEnumerable<SearchModel>>(searches);
Хотя это работает (и может быть единственным вариантом), я бы хотел использовать IValueFormatter
в AutoMapper.У меня есть несколько других форматеров значений для таких вещей, как относительное время, например.
Мой вопрос: это можно сделать?Я не уверен, потому что думаю, что мне нужно было бы передать дополнительную информацию в AutoMapper, чтобы он знал, какой идентификатор часового пояса использовать для преобразования.
Я также пытался избежать этого из отношения Search
-> User
, так как я бы сохранял его в файле cookie, когда пользователь входит в систему (и хотел бы избежать присоединения базы данных JOIN).в получении его).Как передать этот идентификатор часового пояса в AutoMapper, чтобы он мог выполнять настраиваемое сопоставление для пользователя?