PRISM을 사용하여 WPF 응용 프로그램을 개발 중이며 셸 전에로드되는 로그인 기능을 구현해야합니다.프리즘 WPF 응용 프로그램에 로그인
가장 좋은 방법은 무엇입니까? 로그인을 모듈로 취급 하시겠습니까? 쉘과 함께 주 프로젝트에 넣으시겠습니까?
로그인이 올바르다면 나중에 응용 프로그램 (셸 및 모듈)에서 나중에 사용하기 위해 사용자 정보 (이름, 역할 등)를 저장해야합니다. 이 정보를 어디에서 어떻게 보관해야합니까?
미리 감사드립니다.
PRISM을 사용하여 WPF 응용 프로그램을 개발 중이며 셸 전에로드되는 로그인 기능을 구현해야합니다.프리즘 WPF 응용 프로그램에 로그인
가장 좋은 방법은 무엇입니까? 로그인을 모듈로 취급 하시겠습니까? 쉘과 함께 주 프로젝트에 넣으시겠습니까?
로그인이 올바르다면 나중에 응용 프로그램 (셸 및 모듈)에서 나중에 사용하기 위해 사용자 정보 (이름, 역할 등)를 저장해야합니다. 이 정보를 어디에서 어떻게 보관해야합니까?
미리 감사드립니다.
이 논의는 쉘 전에 로그인 양식을 보여주는에 대한 해결책을 설명 http://compositewpf.codeplex.com/discussions/29570
으로 어떻게에 사용자의 정보를 저장하기 위해, 당신은 닷넷 GenericPrincipal
및 GenericIdentity
클래스를 이용할 수 있습니다. 사용자 이름 및 역할과 같은 사용자에 대한 "기본"정보를 나타낼 수 있습니다. 그런 다음 주체/ID를 현재 스레드에 대해 저장할 수 있으므로 세부 정보에 액세스 할 수있는 일종의 정적/단일 클래스 생성에 대해 걱정할 필요가 없습니다. 또한 현재 사용자의 역할 구성원을 쉽게 확인할 수 있습니다.
개체를 작성하고이 같은 현재의 thread에 할당 : -
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의 추상 Bootstrapper 클래스를 구현하는 "부트 스트 래퍼"클래스가 있으며 DI 컨테이너 (Castle Windsor)와 같은 것들을 설정합니다. 메인 윈도우 클래스가 인스턴스화되기 전에 부트 스트 래퍼의'InitializeShell()'메소드에 로그인 뷰를 보여줍니다. –