尽管我对AutoMapper相对陌生,但我在开发小型项目时使用了它。以前我从未遇到过问题,但是现在我在向自定义解析器传递参数时遇到了一些奇怪的行为。
以下是情景:我从仓库获取消息列表,然后将它们映射到前端友好的版本。没有花哨的东西,只是对象之间的正常映射。我有一个字段在前端对象中,用于告诉某个用户是否已经为该消息投票,这就是我使用自定义解析器的原因(它是第二个“ForMember”)。
我在调用一个网络服务的方法时遇到了问题:第一次调用网络服务(使用网络服务控制台),一切都运行得很完美。例如,如果我将"555"作为userId传递进入该方法,那么我会得到正确值: 在自定义解析器中,该值被传递到构造函数: 返回的结果是正确的。问题来了,第二次调用该服务时,通过传递不同的参数(这次是“666”),传递到Custom Resolver构造函数的参数是旧的(' 555 ')。下面是我的意思:
在映射对象之前,我们可以看到传递给构造函数的值是正确的(' 666'): 但是,在传递到Resolver的构造函数时,该值是错误的,而且是旧值(' 555 '): 所有后续对该服务的调用都会在Custom Resolver构造函数中使用原始值(' 555 '),而不管我传递给服务的值如何(如果我从另一个浏览器进行调用,也会发生这种情况)。如果我关闭服务器并重新启动它,则可以传递新参数(直到再次关闭为止,将在所有其他调用中使用该参数)。
你知道为什么会出现这种情况吗?
以下是情景:我从仓库获取消息列表,然后将它们映射到前端友好的版本。没有花哨的东西,只是对象之间的正常映射。我有一个字段在前端对象中,用于告诉某个用户是否已经为该消息投票,这就是我使用自定义解析器的原因(它是第二个“ForMember”)。
public List<SupportMessageUi> GetAllVisible(string userId)
{
Mapper.CreateMap<SupportMessage, SupportMessageUi>()
.ForMember(dest => dest.Votes,
opt => opt.ResolveUsing<SupportMessageVotesResolver>())
.ForMember(dest => dest.UserVoted,
opt => opt.ResolveUsing<SupportMessagesUserVotedResolver>()
.ConstructedBy(() => new SupportMessagesUserVotedResolver(userId)));
var messages = _unitOfWork.MessagesRepository.Get(m => m.Visible);
var messagesUi = Mapper.Map<List<SupportMessageUi>>(messages);
return messagesUi;
}
我在调用一个网络服务的方法时遇到了问题:第一次调用网络服务(使用网络服务控制台),一切都运行得很完美。例如,如果我将"555"作为userId传递进入该方法,那么我会得到正确值: 在自定义解析器中,该值被传递到构造函数: 返回的结果是正确的。问题来了,第二次调用该服务时,通过传递不同的参数(这次是“666”),传递到Custom Resolver构造函数的参数是旧的(' 555 ')。下面是我的意思:
在映射对象之前,我们可以看到传递给构造函数的值是正确的(' 666'): 但是,在传递到Resolver的构造函数时,该值是错误的,而且是旧值(' 555 '): 所有后续对该服务的调用都会在Custom Resolver构造函数中使用原始值(' 555 '),而不管我传递给服务的值如何(如果我从另一个浏览器进行调用,也会发生这种情况)。如果我关闭服务器并重新启动它,则可以传递新参数(直到再次关闭为止,将在所有其他调用中使用该参数)。
你知道为什么会出现这种情况吗?