我有一個SearchService
與Search()
方法,從存儲庫檢索IEnumerable<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,以便知道使用哪個時區ID進行轉換。我也試圖避免從Search
- >User
的關係中獲得這個關係,因爲當用戶登錄時(並且希望避免數據庫JOIN檢索它),我將它存儲在cookie中。如何將此時區ID傳遞給AutoMapper,以便它可以爲每個用戶執行自定義映射?