В.NET System.Threading.Thread.CurrentPrincipal не обновляется
Я упускаю что-то элементарное здесь при отладке кода.NET:
public static void CreateServiceSessionStore()
{
ServiceSessionStore serviceSessionStore = new ServiceSessionStore();
serviceSessionStore.SetIdentity(System.Threading.Thread.CurrentPrincipal.Identity);
System.Threading.Thread.CurrentPrincipal = serviceSessionStore;
// Here, CurrentPrincipal still isn't a serviceSessionStore!
}
В этом коде все кажется веселым. Однако... когда я отлаживаюсь и просто перед последней строкой, я смотрю на System.Threading.Thread.CurrentPrincipal. Значением является объект WebSessionStore, чего я и ожидаю, и я думаю, что последняя строка должна изменить его на объект ServiceSessionStore. Но это не так. Я могу посмотреть на serviceSessionStore, и он содержит объект ServiceSessionStore, но после запуска строки CurrentPrincipal все еще содержит объект WebSessionStore. Ошибка не выдается.
Теперь, помимо того, что на самом деле делают эти объекты, кто-то может предложить идею о том, почему он отказывается обновлять CurrentPrincipal?
1 ответ
Это артефакт отладчика. Выражения отладки оцениваются в выделенном потоке отладчика. CurrentPrincipal - это свойство контекста выполнения потока. Также причиной может быть статическое свойство. Разные потоки будут иметь разные принципалы, поэтому принципал потока отладчика не одинаков.
У тебя нет настоящей проблемы.