Prism 應用不使用傳統 StartupUri,改由 Bootstrapper.Run() 啟動,掌控完整啟動流程:載入模組、註冊服務、建立 Shell 等。UnityBootstrapper 為預設實作,提供虛擬方法供客製化。
public void Run(bool useDefaultConfiguration) {
_useDefaultConfiguration = useDefaultConfiguration;
ILoggerFacade logger = LoggerFacade; // 1. 建立日誌
Container = CreateContainer(); // 2. 建立容器
ConfigureContainer(); // 3. 配置容器(註冊基礎服務)
ConfigureRegionAdapterMappings(); // 4. 配置 Region 適配器
DependencyObject shell = CreateShell(); // 5. 建立 Shell
if (shell != null) {
RegionManager.SetRegionManager(shell, Container.Resolve<IRegionManager>());
}
InitializeModules(); // 6. 初始化模組
}
內建 TraceLogger 封裝 System.Diagnostics.Trace,全域使用。
CreateContainer() 建立 UnityContainer;ConfigureContainer() 註冊 Logger、自身、模組枚舉器,若 useDefaultConfiguration 為 true 則註冊基礎服務(EventAggregator、RegionManager 等)。
預設註冊 Selector、ItemsControl、ContentControl 三種容器控制項對應適配器。自訂容器需自行實作 RegionAdapterBase<T> 並重寫 ConfigureRegionAdapterMappings 註冊。
CreateShell() 為抽象方法,必須自行實作:實例化主視窗、呼叫 Show()、回傳 DependencyObject。
取得 IModuleEnumerator 與 IModuleLoader,載入標記為啟動載入的模組:moduleLoader.Initialize(moduleEnumerator.GetStartupLoadedModules())。