我試圖讓AutoMapper負責本地化我們的視圖模型上的所有DateTime屬性。我們在系統中的任何地方都使用UTC,並在數據庫中以UTC存儲所有內容,但我們希望自動將其轉換爲用戶的時區以供顯示。全局應用AutoMapper的值解析器
看完所有選項後,我決定使用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的測試,並沒有看到任何工作。
謝謝!
這是一個很好的問題,我將是一個共同的要求。根據吉米的回答,我沒有嘗試實施。任何人都知道一個可以遵循的工作示例? – 2015-07-22 10:57:57