VB.NET - Доступ к My.MySettings.Default изменяет Thread.CurrentPrincipal? - PullRequest
1 голос
/ 15 ноября 2011

Похоже, что когда вы получаете доступ к My.Settings.Default в VB.NET, ваш текущий поток изменяется.Рассмотрим следующий код.

            Dim name = "admin"
            Dim user = Membership.GetUser(name)
            Dim identity = New GenericIdentity(user.UserName)
            Dim principal = New RolePrincipal(identity)

            System.Threading.Thread.CurrentPrincipal = principal
            Debug.WriteLine(System.Threading.Thread.CurrentPrincipal.Identity.Name)
            Dim x = My.MySettings.Default
            Debug.WriteLine(System.Threading.Thread.CurrentPrincipal.Identity.Name)

Вывод этого кода:

admin

MyDomain \ MyUserName

Этоожидается?Это где-нибудь задокументировано?Я не смог найти никаких ссылок на него.

Кажется, он также делает это только при первом обращении к My.MySettings.Default, что означает, что можно обойти это свойство, коснувшись свойства, чтобы инициализировать его перед попыткойустановить CurrentPrincipal потока.Будут ли в этом какие-либо нежелательные побочные эффекты?

1 Ответ

1 голос
/ 15 ноября 2011

Я полагаю, что это потому, что экземпляр по умолчанию создается с помощью потокобезопасной операции:

    Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings)

Поскольку экземпляр по умолчанию создается только при первом доступе к MySettings, я думаю, что самое простое решение - этополучить доступ к нему один раз, прежде чем менять свою личность.

...