У меня есть SearchService
с методом Search()
, который извлекает IEnumerable<Search>
из репозитория. Эти объекты Search
поступают непосредственно из LINQ To SQL. Затем я использую AutoMapper для преобразования этих типов Search
в типы SearchModel
(а позже они передаются, например, в контроллер).AutoMapper: Пользовательское сопоставление
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);
Хотя это работает (и может быть единственным вариантом), я хотел бы использовать AutoMapper-х IValueFormatter
. Например, у меня есть несколько других форматов значений для таких вещей, как относительное время.
Мой вопрос: это можно сделать? Я не уверен, потому что, наверное, мне нужно передать дополнительную информацию AutoMapper, чтобы он знал, какой идентификатор часового пояса использовать для преобразования.
Я также пытался избежать этого из Search
->User
отношения, как я бы это хранится в куки, когда пользователь входит в систему (и хотел бы избежать базы данных РЕГИСТРИРУЙТЕСЬ в получении его). Как передать этот идентификатор часового пояса в AutoMapper, чтобы он мог выполнять настраиваемое сопоставление для каждого пользователя?