【发布时间】:2012-05-25 19:53:03
【问题描述】:
我现在正在查找 AutoMapper 代码(为我正在从事的项目之一评估它),坦率地说,我很惊讶:
- 库 API 基于单个静态访问点(
Mapper类型),因此通常它的任何方法都必须是线程安全的 - 但我没有在代码中找到任何证据。
我能找到的只是this issue,但即使是那里的陈述似乎也不正确:如果Map 在内部不使用线程安全的数据结构,它也不能被视为线程安全的,如果我要在非并发上下文中调用CreateMap,但同时与Map 调用。
即AutoMapper 唯一可能的使用模式,例如ASP.NET MVC 应用程序是:
lock (mapperLock) {
... Mapper.AnyMethod(...) ...
}
显然,如果我是正确的,那将是一个巨大的缺陷。
所以我有两个问题:
- 我说的对吗?
- 如果是,没有此问题的 AutoMapper 的最佳替代方案是什么?
【问题讨论】:
-
主键似乎是通过
ThreadSafeList<TypeMap> _typeMaps进行的双重检查查找;是什么让您认为它不是线程安全的?你认为具体是什么不是线程安全的? -
TypeMap 是不可变对象吗?
-
你告诉我! (问题也是:即使不是,它是否在任何时候都被不当更新了,除了你)。您声称它不是线程安全的;请详细说明您认为不安全的内容。请注意,通常策略(一旦构建)不会更新,因此唯一需要保护的是对策略缓存的访问,这似乎是正确完成的。
-
现在再次查找代码。实际上,我在那里错过了
ThreadSafeList的使用。 -
我认为这个问题是完全正确的。我们不能假设该库是线程安全的,因为我们还没有找到反对它的证据。反之亦然:除非证明并非如此,否则一切都是不安全的。我想这个库的作者需要介入。
标签: .net asp.net-mvc automapper