我正在使用PRISM開發WPF應用程序,我需要實現在Shell之前加載的登錄功能。在Prism WPF應用程序中登錄
什麼是最好的辦法呢?將登錄視爲模塊?把它與殼牌的主要項目放在一起?
如果登錄是正確的,我需要存儲一些用戶信息(姓名,角色等),使用它以後在整個應用程序(在殼牌也在模塊)。我在哪裏以及如何存儲這些信息?
在此先感謝。
我正在使用PRISM開發WPF應用程序,我需要實現在Shell之前加載的登錄功能。在Prism WPF應用程序中登錄
什麼是最好的辦法呢?將登錄視爲模塊?把它與殼牌的主要項目放在一起?
如果登錄是正確的,我需要存儲一些用戶信息(姓名,角色等),使用它以後在整個應用程序(在殼牌也在模塊)。我在哪裏以及如何存儲這些信息?
在此先感謝。
這個討論描述了一個解決方案,顯示登錄表單前殼:http://compositewpf.codeplex.com/discussions/29570
至於如何來存儲用戶的細節,你可以利用的.Net GenericPrincipal
和GenericIdentity
類。他們讓你代表一個用戶的「基本」信息,比如他們的用戶名和角色。然後,主體/身份可以針對當前線程進行存儲,因此您無需擔心創建某種類型的靜態/單身類訪問細節。檢查當前用戶的角色成員資格也很容易。
創建對象,分配給當前線程這樣的: -
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);
}
如果GenericPrincipal
和GenericIdentity
是不合適的,我會創建一個單身人員類與必要的屬性(名稱,角色等),可以傳遞到應用程序的其他部分,例如使用IoC容器。靜態類是一個更簡單的解決方案(不需要傳遞),但靜態可以使單元測試更加棘手。
感謝您的分享。哪裏可以調用'LoginViewModel'來顯示? – Shimmy
@Shimmy自從我看了代碼之後已經有一段時間了,但我們有一個實現Prism抽象引導類的「引導程序」類,並且是我們設置像DI容器(Castle Windsor)之類的東西的地方。在實例化主窗口類之前,我們在引導程序的'InitializeShell()'方法中顯示登錄視圖。 –