一、前言 最近使用 的時候,一段時間久會產生 這個問題。後來通過測試,發現部署在 上的站點,預設情況下,IIS會在每個間隔固定時間回收 ,如果剛剛好有很多請求訪問調用了 映射的介面,就會產生如下問題。 System.NullReferenceException: 未將對象引用設置到對象的實例。 在 ...
一、前言
最近使用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擴展這種方式進行使用,對於不存在的配置,自動創建相關的映射。