Хотя я относительно новичок в AutoMapper, я использую его в небольшом проекте, который я разрабатываю. У меня никогда не было проблем с этим, но теперь я сталкиваюсь с некоторыми странными параметрами прохождения поведения в Custom Resolver.AutoMapper - передача параметра в обычное поведение искателя распознавания
Вот сценарий: я получаю список сообщений из своего репозитория, а затем сопоставляю их с дружественной к нему версией. Ничего необычного, просто нормальное отображение между объектами. У меня есть поле в этом внешнем интерфейсе объекта, который говорит, если определенный пользователь уже проголосовал за это сообщение, и это то, что я использую пользовательский Разрешитель для (это то, что второй «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;
}
Я m, вызывающий этот метод в веб-службе, и проблема заключается в следующем: при первом вызове веб-службы (с помощью консоли webservice) все работает отлично. Например, если я прохожу «555», как USERID я получаю к этому методе с правильным значением:
И в пользовательском резольвере значение правильно передается конструктору:
Полученные результаты верны. Проблема следующая. Во второй раз, когда я вызываю службу, передавая другой аргумент ('666' на этот раз), аргумент, который попадает в конструктор Custom Resolver, является старым ('555'). Вот что я имею в виду:
Непосредственно перед отображением объектов мы можем видеть, что значение передается конструктору было правильным («666»):
Но когда он попадает в конструктор резольвера значение является неправильным, и старый («555»):
Все последующие вызовы службы использовать исходное значение в конструкторе пользовательского распознавателя («555»), независимо от значения I перейти к сервису (также происходит если я сделаю звонок из другого браузера). Если я выключу сервер и перезапустите его, я могу передать новый параметр (который будет использоваться во всех других вызовах, пока я не закрою его снова).
Любая идея о том, почему это происходит?