現在我仰視AutoMapper代碼(評估它的我的工作項目之一),而且,坦率地說,我很驚訝:AutoMapper中的Mapper.Map是否線程安全?
- 庫API是基於一個靜態接入點(
Mapper
類型),所以通常它的任何方法都必須是線程安全的 - 但我沒有在代碼中找到任何這方面的證據。
所有我能找到是this issue,但即使在發言中似乎有不正確的:如果Map
不使用線程安全的數據結構的內部,它不能也視爲線程安全的,如果我打算在非併發上下文中調用CreateMap
,但要同時撥打Map
。
I.e.在例如AutoMapper中唯一可能的使用模式ASP.NET MVC應用程序是:
lock (mapperLock) {
... Mapper.AnyMethod(...) ...
}
顯然,如果我是正確的,這是一個巨大的缺乏。
所以我有兩個問題:
- ,對嗎?
- 如果是的話,AutoMapper的最佳替代方案是什麼?
主要關鍵似乎是通過'ThreadSafeList _typeMaps'進行的雙重檢查;是什麼讓你覺得它不是線程安全的?你認爲什麼***特別是不是線程安全的? –
TypeMap是一個不可變的對象嗎? –
你告訴我! (並且問題也是:即使不是,在任何時候都不恰當地更新,除了你)。你聲稱它不是線程安全的;請詳細說明你認爲不安全的事情。請注意,通常策略(一旦構建)未更新,因此唯一需要保護的是訪問戰略緩存,這似乎是正確完成的。 –