Prism의 구성 Bootstrapper 와 Shell
프리즘의 기본적인 구조
왼편이 개발자가 구현해야하는 부분이고 오른쪽은 Prism이 제공해 놓은 기능이다.
사실 이 구조를 기억한다고 해서 도움이 될 것 같진 않다.
Prism의 모든 이해의 시작은 시작점인 Bootstrapper에서 부터 시작되어야 한다.
1. Bootstrapper
공식 부트스트래퍼 소개내용 : 부트스트래퍼는 Prism 라이브러리를 사용하여 구축된 응용프로그램의 "초기화" 를 담당하고 있는 클래스이다.
즉 Prism으로 만들어진 응용프로그램에서는 Bootstrapper로만 Prism의 기능을 초기화 할때 안전하게 초기화 할 수 있다는 것을 알 수 있다.
부트스트래핑 절차의 기본 단계.
실제로 부트스트래퍼가 실행되는 과정을 로그로 추적하면 이렇게 나온다.
해당 소스코드 : https://github.com/2Bbear/WindowsProgrmaDevelop/tree/master/WPF/UsingMvvmPrismLibrary/PrismLibraryStudyBootStrap
App OnStartUp-> MyBootstrapper createshell -> MainWindow 생성자 -> MyBootstrapper InitializeShell -> App OnStartUp종료
이렇듯. 기존 WPF의 스타트업 구조 사이에 부트스트랩이 끼어듬으로써 MainWindow를 시작하고 있음을 확인 할 수 있다.
2. Shell
특히 Bootstrapper를 상속받은 MyBootstrapper에는 CreateShell이라는 메소드를 오버라이드하고 있는데 이곳에서 return형으로 컨테이너형태에 담고 있는 객체의 형태로 MainWindow의 형태를 갖고 있다.
즉 시작 윈도우를 설정하고 있는 것이다.
기존의 WPF에서는 Uniform Resource Identifiuer라는 URI로 주 화면을 실행하는 코드가 App.xaml에 있었는데 그 코드가 사라지고 부트스트래퍼 CreateShell로 넘어온 것이다.
공식 홈페이지 영어 해석:
Prism 라이브러리로 만든 응용프로그램에서 쉘과 주 화면을 만드는 것은 부트스트래퍼의 책임이다.
쉘은 쉘이 표시되기 전에 등록되어야 하는데 Region Manager같은 서비스에 의존하고 있다.
본문 해석에서 확인 할 수 있듯이 CreateShell이라는 것은 Shell을 만들고 그것을 어딘가에 등록하고 있다. 그 대상에 바로 Region Manager라는 곳이다.
1번 단락의 로그 사진을 다시 살펴보면
App 시작 -> 모듈카테고리 생성 -> 모듈카테고리 환경설정 -> 유니티 컨테이너 생성 -> 유니티 컨테이너 환경설정
-> 컨테이너에 부트스트래퍼 확장 붙이기 -> 서비스로케이션 싱글톤 환경설정 -> 유니티에 사용된 컨테이너 로케이터 환경설정
-> region 어뎁터 환경설정-> 기본 region 행동 환경설정 -> 프레임워크 예외형태 등록
-> Shell 생성 -> Bootstrapper CreateShell 실행 -> MainWindow생성자 실행 -> Region Manager 세팅 -> Region 업데이트
-> Shell 초기화 -> Bootstrapper InitializeShell 실행 -> 모듈 초기화 -> Bootstrapper 시퀸스(흐름) 종료
이런식으로 실행이 되는데 Create Shell을 실행하면서 Region Manager를 호출하는 모습을 확인 할 수 있다.
즉 Shell이 생성되기 이전에 Region Manager가 존재함을 알 수 있다.
여기서 Region Manager에 Shell 붙어있는지 장담을 할 수는 없는데. 아직 코드를 보지 못하였기 때문이다.
아무튼 이렇게 Bootstrapper를 이용하여 응용프로그램을 초기화 하면서 고려해야 할 것들이
- DI 컨테이너를 위해서 MEF, Unity 혹은 또다른 컨테이너를 사용할지 결정해야 한다. 이것은 당신이 사용할 부트스래퍼가 어떤 것이며 당신이 다른 컨테이너에 대해 부트스트래퍼 작성여부를 결정하게 될 것이다.
- 응용프로그램에서 당신이 원하는 응용프로그램의 특정 서비스에 대해 고려해 보아야한다. 즉 고려한 특정 서비스를 컨테이너에 등록해야 하기 때문이다.
- 내장 로깅 서비스가 당신에게 필요한지, 아니면 다른 로깅 서비스를 이용 해야 할지 결정 할 수 있다.
- 응용프로그램이 어떻게 모듈을 탐색할지 결정할 수 있다.
3. Custom Bootstrapper 만들기
https://github.com/PrismLibrary/Prism-Samples-Wpf/tree/master/01-BootstrapperShell
기본적인 예제는 이곳을 참조하는 것이 좋다.
내부적인 구성은
https://pirtaja.tistory.com/entry/Prism-2-Initializing-Applications-Using-the-Prism-Library-50-for-WPF
이곳을 참조하는 것이 좋다.
'중단한 프로젝트 > WPF_PrismLibrary(추후진행)' 카테고리의 다른 글
Prism은 어떻게 모듈을 관리하는가 (0) | 2019.02.19 |
---|---|
Prism은 어떻게 View를 다른 View로 변경하는가 (0) | 2019.02.19 |
Prism은 어떻게 View상호작용 view를 호출하는가 (0) | 2019.02.19 |
Prism은 어떻게 View에서 View를 호출하는가 - ViewDiscovery (0) | 2019.02.19 |
Region이란 무엇인가 (0) | 2019.02.19 |