在這種情況下,我在ASP.MVC 3.0中使用AutoMapper
庫來處理dto和模型對象之間的映射。我試圖將所有AutoMapper配置碼在一個地方,因此它具有以下結構:AutoMapper配置在使用ASP.MVC 3.0時重置
protected void Application_Start()
{
ConfigureAutoMapper();
AreaRegistration.RegisterAllAreas();
SetupWindsorContainer();
RegisterRoutes(RouteTable.Routes);
}
...
private void ConfigureAutoMapper()
{
Mapper.CreateMap<SampleDto, SampleModel>();
...
}
此代碼被放置在MvcApplication
類。通過調試器,我檢查了這個代碼是否被執行,但是當我嘗試在Controller代碼中執行Mapper.Map<>
時,我得到了懷疑映射尚未註冊的說法。我曾懷疑這與ASP.MVC如何處理AppDomains
有關,但在兩種方法(註冊碼和映射代碼)中似乎都是相同的AppDomain
。 ASAIR此代碼上ASP.MVC 2.0
EDIT 1正確執行:上Application_Start
根據MS文檔:
「時調用在ASP.NET 應用所述第一資源(例如,頁)被請求。Application_Start方法中的一個應用程序的生命週期中只能調用 一次。您可以使用此方法 執行啓動任務,如將數據加載到高速緩存 和初始化靜態值。
你應該在應用程序啓動時只設置靜態數據。不要設置 任何實例數據,因爲這將是僅適用於創建的HttpApplication類的第一個 實例。」
AutoMapper配置是靜態類,所以我覺得在Application_Start
初始化時,它應能正常工作,但事實並非如此。
你不應該把你的AutoMapper配置放在'BeginRequest'中,因爲不需要在每個請求上重新創建配置(出於性能的原因) –
我同意 - 只是指出它爲什麼不起作用,而窮人解決方法。 – Cymen
看看我的'編輯1'筆記。我不同意這個代碼不能從'Application_Start'執行,因爲它足夠爲AppDomain調用一次。 – jethro