2009-02-16 113 views
2

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

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

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

好的,这个工程,但它也使得编写单元测试有点困难。我不喜欢单元测试中的单身/静态成员。

也许我可以注入ApplicationController到每个需要访问登录用户的类?任何其他想法?

您认为最好的处理方法是什么?

回答

1

注射是一个很好的答案。你可能会发现其他一些有用的东西放在ApplicationController,它可以很容易地进行单元测试。

2

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

Avoid singleton,这可能会对单元测试或如果您决定稍后扩展您的应用程序有问题。

1

根据您希望对用户身份所做的事情考虑将其放到System.Threading.Thread.CurrentPrincipal上。如果您的应用程序具有SecurityPermissionFlag.ControlPrincipal权限,那么只需设置CurrentPrincipal即可。另请注意,System.Environment.UserName具有已登录的Windows用户身份。

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

相关问题