[英]How to set an AutoMapper global configuration just for current user?
簡介 :
我有一個帶有AutoMapper
和IOC
( StructureMap )的Asp.Net MVC
項目,一切正常。
我聲明了一些AutoMapper Profiles
,並由IOC
注冊了它們,最后在某些類的承包商中使用IMappingEngine
在其中使用AutoMapper
。
AutoMapper Version: 4.0.4
StructureMap Version: 4.2.0.402
問題:
我想根據當前用戶的時區聲明為所有AutoMapper配置文件設置全局轉換配置 。
此AutoMapper的規則轉換配置:
- 應該是所有AutoMapper配置文件的全局配置
- 應該是用戶每次向我們發送請求時在項目中的某個位置,我們根據用戶時區聲明設置了該請求
- 不應影響其他聯機用戶的AutoMapper配置(不應是IOC中AutoMapper的單例對象的設置)
我做了什么:
我在繼承自AuthorizeAttribute
的類的OnAuthorization
方法中編寫以下配置,並在項目的Controller
類中使用了此屬性:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public sealed class Mcv5AuthorizeAttribute : AuthorizeAttribute
{
public Mcv5AuthorizeAttribute(): base(){}
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
var ct = filterContext.HttpContext;
if (ct.Request.IsAuthenticated)
{
Mapper.Initialize(conf => conf.CreateMap<DateTime, string>().ConvertUsing(new MyDateTimeConverter(ct.User.GetUserTimezoneId())));
// Other codes
}
}
}
我也想把上面的代碼放在Base Controller
或Controller Factory
。
我的問題:
IOC
,是否需要對Mapper.Initialize
影響其他在線用戶的AutoMapper
配置? AutoMapper
轉換配置以符合上述規則? Base Controller
, Controller Factory
,自定義AuthorizeAttribute
或...)? 更新:
我真的想在AutoMapper中定義一些自定義類型轉換器 。 您可以閱讀它,並在那里看到一些ITypeConverter
轉換器,例如ITypeConverter<string, DateTime>
。 但是我正在尋找一種方法來參數化TypeConverter
並根據用戶的設置在每個請求中動態地向它們傳遞一些參數,方法是它們對於所有配置文件都是全局工作的,但僅限於當前用戶范圍 。
也許國際奧委會可以通過這種方式幫助我。 你有什么想法嗎?
無論如何,我認為如果我通過Mapper.Initialize
注冊轉換器, Mapper.Initialize
其Mapper.Initialize
影響其他在線用戶,因為IOC將AutoMapper視為singelton對象。 我正在尋找一種方法來一起遵守所有提到的規則。
每個AppDomain應該調用一次Initialize。 您可以通過Context.Items為每個Map調用傳遞參數。 您可以在解析器/轉換器中檢查這些參數。 您還可以通過注入每個請求助手來使用依賴項注入來實現相同的目的。 文檔在這里 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.