AppDomain.CurrentDomain.SetThreadPrincipal不总是起作用

时间:2019-02-11 12:29:33

标签: c# winforms

我想在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;
        }
    }
}

Permission类:

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;
        }
    }
}

除了我登录时,对Permission.DummySet()的调用不执行任何操作,Login方法工作正常。没有错误,没有异常,但是没有设置线程的主体。 奇怪的是,当我在调用service.Login(trigram,password)之前取消注释该行时,主体已正确设置。

显然,打电话给我的服务是问题所在,但我找不到原因。该服务是一项商业服务,其中我使用ninject注入了数据层的实例。也许与我的问题有关?

谢谢!

0 个答案:

没有答案