AppDomain.CurrentDomain.SetThreadPrincipal не всегда функционирует - PullRequest
0 голосов
/ 11 февраля 2019

Я хочу добавить некоторые функции управления ролями в мое приложение WinForm.К настоящему времени я добавил пользователей, роли и права в свою базу данных.Пользователь входит в систему с определенной формой, и приложение получает свою роль через службу.Теперь я хотел бы установить принципала потока, чтобы иметь возможность использовать информацию о роли в любом месте.

private bool Login(string trigram, string password)
{
    using (var service = GetService())
    {
        //Permission.DummySet();
        _currentUser = service.Login(trigram, password);

        if (_currentUser != null)
        {
            Permission.DummySet();
            return true;
        }
        else
        {
            MessageBox.Show("User unknown or incorrect password");
            return false;
        }
    }
}

Класс разрешений:

public static class Permission
{
    private static bool _isSet = false;

    public static void DummySet()
    {
        if (!_isSet)
        {
            GenericPrincipal principal = new GenericPrincipal(
                new GenericIdentity("Serge Karamazov"),
                null);
            AppDomain.CurrentDomain.SetThreadPrincipal(principal);
            _isSet = true;
        }
    }
}

Метод Login работает нормально, за исключением того, что при входе в систему вызов Permission.DummySet () ничего не делает.Нет ошибок, нет исключений, но основной поток не установлен.Что странно, когда я раскомментирую строку перед вызовом service.Login (триграмма, пароль), принципал теперь правильно установлен.

Очевидно, что звонок в мой сервис - это проблема, но я не могу понять, почему.Служба является бизнес-службой, в которой я внедряю экземпляр моего уровня данных, используя ninject.Может быть, это как-то связано с моей проблемой?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...