2009-02-16 64 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用戶身份。

當一個內置類型已經存在並且做了你想要的(或接近於什麼)時,總是有一個成本來滾動你自己的類型。

相關問題