AutoMapper IIS回收引發的 未將對象引用設置到對象實例


一、前言

最近使用AutoMapper的時候,一段時間久會產生System.NullReferenceException:未將對象引用設置到對象的實例。這個問題。后來通過測試,發現部署在IIS上的站點,默認情況下,IIS會在每個間隔固定時間回收AppPool,如果剛剛好有很多請求訪問調用了AutoMapper映射的接口,就會產生如下問題。

System.NullReferenceException: 未將對象引用設置到對象的實例。
   在 AutoMapper.TypeMapFactory.<>c__DisplayClass3_0.<MapDestinationPropertyToSource>b__0(IMemberConfiguration _)
   在 System.Linq.Enumerable.Any[TSource](IEnumerable`1 source, Func`2 predicate)
   在 AutoMapper.TypeMapFactory.CreateTypeMap(Type sourceType, Type destinationType, IProfileConfiguration options, MemberList memberList)
   在 AutoMapper.ConfigurationStore.<>c__DisplayClass80_0.<CreateTypeMap>b__0(TypePair tp)
   在 System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
   在 AutoMapper.ConfigurationStore.CreateMap[TSource,TDestination](String profileName, MemberList memberList)
   在 PaymentPlatform.Test.AutoMapperTest.ProcessRequest(HttpContext context)

二、解決方案

方法一

打開對應IIS站點的應用程序池,點擊高級設置。如下圖:

將上圖中的固定時間間隔(分鍾)設置為0.

方法二

可在全局的Application_Start中,定義所有的AutoMapper類型映射。這樣就可以保證映射關系的一次性初始化。后續代碼無需再定義,只需關注對象轉換就可以了。

方法三

也可使用AutoMapper擴展這種方式進行使用,對於不存在的配置,自動創建相關的映射。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM