/// <summary> /// Initializes the application. /// </summary> public void Initialize() { if (State.IsInitialized) { throw new InvalidOperationException($"You shouldn't call {nameof(Initialize)} more than once."); } if (!State.IsPreInitialized) { throw new InvalidOperationException($"You must call {nameof(PreInitialize)} before calling '{nameof(Initialize)}'."); } InitializeActivity.Start(); CoreStartup.Initialize(InitializeViewServices); Logger = GetOrCreateLogger(ServiceProvider); OnInitialized(ServiceProvider); InitializeActivity.Stop(); State.IsInitialized = true; Logger.LogInformation("Initialized startup."); }
/// <summary> /// Pre-initializes the application. /// This must be called as early as possible. /// </summary> public void PreInitialize() { if (State.IsPreInitialized) { throw new InvalidOperationException($"You shouldn't call {nameof(PreInitialize)} more than once."); } PreInitializeActivity.Start(); CoreStartup.PreInitialize(); PreInitializeActivity.Stop(); State.IsPreInitialized = true; }
/// <summary> /// Starts the application. /// This method can be called multiple times. /// </summary> /// <returns><see cref="Task"/></returns> public async Task Start() { if (!State.IsInitialized) { throw new InvalidOperationException($"You must call {nameof(Initialize)} before calling '{nameof(Start)}'."); } Logger.LogDebug("Starting startup."); var isFirstLoad = !State.IsStarted; if (isFirstLoad) { StartActivity.Start(); } var coreStart = CoreStartup.Start(); var viewStart = StartViewServicesWithLogs(ServiceProvider, isFirstLoad); await Task.WhenAll(coreStart, viewStart); if (isFirstLoad) { StartActivity.Stop(); State.IsStarted = true; } Logger.LogInformation("Started startup."); async Task StartViewServicesWithLogs(IServiceProvider services, bool isFirstStart) { Logger.LogDebug($"Starting view services (isFirstStart: {isFirstStart})."); await StartViewServices(services, isFirstStart); Logger.LogInformation("Started view services."); } }