1

在调试一些 .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 的想法吗?

4

1 回答 1

2

这是一个调试器工件。调试表达式在专用调试器线程上进行评估。CurrentPrincipal 是线程执行上下文的一个属性。这也是它可以是静态属性的原因。不同的线程将具有不同的主体,因此调试器线程的主体也不相同。

你没有真正的问题。

于 2011-09-28T20:21:38.133 回答