在Windows应用程序中存储登录信息

时间:2009-02-16 14:57:58

标签: c# winforms session login

在Web应用程序中,用户登录信息通常存储在会话中,但Windows应用程序如何?使用单身人士是正确的事吗?我应该只使用静态属性吗?

让我们说我将登录信息存储在静态属性ApplicationController中。与loggedInUser。用户成功登录后,将设置该属性。在成功登录之前,LoggedInUser返回null。然后,当我从OrderListPresenter类调用OrdersService示例时,我使用LoggedInUser作为参数。

var service = new OrdersService();
var orderCollection = service.GetOrdersByUserID(
    ApplicationController.LoggedInUser.ID);

好的,这可行,但它也使单元测试写得更难。我不喜欢在我的单元测试中使用单身人士/静态成员。

也许我可以将ApplicationController注入需要访问登录用户的每个类?还有其他想法吗?

您认为处理此问题的最佳方式是什么?

3 个答案:

答案 0 :(得分:2)

我会创建一个CurrentContext对象,其中包含一个CurrentUser字段并将其传递给我的所有演示者。

Avoid singleton,这可能会对单元测试造成问题,或者您决定稍后扩展应用程序。

答案 1 :(得分:1)

注射是一个很好的答案。您可能会发现其他有用的东西放在ApplicationController中,这样可以轻松进行单元测试。

答案 2 :(得分:1)

根据您希望对用户身份执行的操作,请考虑将其放在System.Threading.Thread.CurrentPrincipal上。如果您的应用程序具有SecurityPermissionFlag.ControlPrincipal权限,则只需设置CurrentPrincipal即可。另请注意,System.Environment.UserName具有登录的Windows用户标识。

当内置类型已经存在并且做了你想要的(或接近什么)时,滚动你自己的类型总是有成本。