2014-04-11 110 views
2

我正在使用PRISM開發WPF應用程序,我需要實現在Shell之前加載的登錄功能。在Prism WPF應用程序中登錄

  1. 什麼是最好的辦法呢?將登錄視爲模塊?把它與殼牌的主要項目放在一起?

  2. 如果登錄是正確的,我需要存儲一些用戶信息(姓名,角色等),使用它以後在整個應用程序(在殼牌也在模塊)。我在哪裏以及如何存儲這些信息?

在此先感謝。

回答

6

這個討論描述了一個解決方案,顯示登錄表單前殼:http://compositewpf.codeplex.com/discussions/29570

至於如何來存儲用戶的細節,你可以利用的.Net GenericPrincipalGenericIdentity類。他們讓你代表一個用戶的「基本」信息,比如他們的用戶名和角色。然後,主體/身份可以針對當前線程進行存儲,因此您無需擔心創建某種類型的靜態/單身類訪問細節。檢查當前用戶的角色成員資格也很容易。

創建對象,分配給當前線程這樣的: -

string[] roles = { "User", "Admin" }; 
Thread.CurrentPrincipal = new GenericPrincipal(
    new GenericIdentity("Joe"), 
    roles); 

然後,每當您要訪問的細節當前登錄的用戶: -

public string GetUsername() 
{ 
    var principal = Thread.CurrentPrincipal; 
    var identity = principal == null ? null : principal.Identity; 
    return identity == null ? null : identity.Name; 
} 

public bool IsInRole(string role) 
{ 
    var principal = Thread.CurrentPrincipal; 
    return principal == null ? false : principal.IsInRole(role); 
} 

如果GenericPrincipalGenericIdentity是不合適的,我會創建一個單身人員類與必要的屬性(名稱,角色等),可以傳遞到應用程序的其他部分,例如使用IoC容器。靜態類是一個更簡單的解決方案(不需要傳遞),但靜態可以使單元測試更加棘手。

+0

感謝您的分享。哪裏可以調用'LoginViewModel'來顯示? – Shimmy

+2

@Shimmy自從我看了代碼之後已經有一段時間了,但我們有一個實現Prism抽象引導類的「引導程序」類,並且是我們設置像DI容器(Castle Windsor)之類的東西的地方。在實例化主窗口類之前,我們在引導程序的'InitializeShell()'方法中顯示登錄視圖。 –