2Bbear's knowledge workshop

중단한 프로젝트/WPF_PrismLibrary(추후진행) +10



Region의 생성 순서

https://github.com/2Bbear/WindowsProgrmaDevelop/tree/master/WPF/UsingMvvmPrismLibrary/03-CustomRegions

참조 코드



App RegisterTypes -> App ConfigureRegionAdapterMappings -> StackPanelIRegionAdapter 생성자-> ...



전편의 부트스트랩 생성과정.


두 사진을 비교해서 각 과정을 살펴보면


응용프로그램이 생성되면서 리전이 이미 만들어져있음을 확인 할 수 있다.

prismstack


프리즘의 기본적인 구조

왼편이 개발자가 구현해야하는 부분이고 오른쪽은 Prism이 제공해 놓은 기능이다.

사실 이 구조를 기억한다고 해서 도움이 될 것 같진 않다.


Prism의 모든 이해의 시작은 시작점인 Bootstrapper에서 부터 시작되어야 한다.


1. Bootstrapper

공식 부트스트래퍼 소개내용 : 부트스트래퍼는 Prism 라이브러리를 사용하여 구축된 응용프로그램의 "초기화" 를 담당하고 있는 클래스이다.


즉 Prism으로 만들어진 응용프로그램에서는 Bootstrapper로만 Prism의 기능을 초기화 할때 안전하게 초기화 할 수 있다는 것을 알 수 있다. 


Basic stages of the bootstrapping process



부트스트래핑 절차의 기본 단계.



실제로 부트스트래퍼가 실행되는 과정을 로그로 추적하면 이렇게 나온다.

해당 소스코드 : 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

이곳을 참조하는 것이 좋다.