// Move to another method to avoid loading Zetbox.Objects private void InitializeClient(string[] args, ZetboxConfig config) { InitializeSplashScreenImageResource(); StartupScreen.ShowSplashScreen(Zetbox.Client.Properties.Resources.Startup_Message, Zetbox.Client.Properties.Resources.Startup_InitApp, 6, config); if (config.Server != null && config.Server.StartServer) { StartupScreen.SetInfo(Zetbox.Client.Properties.Resources.Startup_Server); serverDomain = new ServerDomainManager(); serverDomain.Start(config); } var builder = Zetbox.API.Utils.AutoFacBuilder.CreateContainerBuilder(config, config.Client.Modules); ConfigureContainerBuilder(config, builder); container = builder.Build(); container.ApplyPerfCounterTracker(); container.Resolve<IUIExceptionReporter>().BeginInit(); API.AppDomainInitializer.InitializeFrom(container); StartupScreen.SetInfo(Zetbox.Client.Properties.Resources.Startup_Launcher); LoadStyles(this.Resources); // Focus nightmare // http://stackoverflow.com/questions/673536/wpf-cant-set-focus-to-a-child-of-usercontrol/4785124#4785124 EventManager.RegisterClassHandler(typeof(Window), Window.LoadedEvent, new RoutedEventHandler(FocusFixLoaded)); EventManager.RegisterClassHandler(typeof(Zetbox.Client.WPF.View.ZetboxBase.InstanceCollectionBase), UserControl.LoadedEvent, new RoutedEventHandler(FocusFixLoaded)); // Init credentials explicit StartupScreen.SetInfo(Zetbox.Client.Properties.Resources.Startup_EnsuringCredentials); var principalResolver = container.Resolve<IPrincipalResolver>(); var credResolver = container.Resolve<ICredentialsResolver>(); try { while (principalResolver.GetCurrent() == null) { credResolver.InvalidCredentials(); } } catch (AuthenticationException) { ReportExceptionAndExit(WpfToolkitResources.App_InvalidCredentials_Caption, WpfToolkitResources.App_InvalidCredentials); } catch (InvalidZetboxGeneratedVersionException) { ReportExceptionAndExit(WpfToolkitResources.App_InvalidZetboxGeneratedVersion_Caption, WpfToolkitResources.App_InvalidZetboxGeneratedVersion); } credResolver.Freeze(); StartupScreen.SetInfo(Zetbox.Client.Properties.Resources.Startup_Launcher); container.Resolve<IUIExceptionReporter>().EndInit(); FixupDatabase(container.Resolve<Func<IZetboxContext>>()); IServiceControlManager scm = null; if (container.TryResolve<IServiceControlManager>(out scm)) { Logging.Log.Info("Starting Zetbox Services"); scm.Start(); } else { Logging.Log.Info("Service control manager not registered"); } StartupScreen.CanCloseOnWindowLoaded(); // delegate all business logic into another class, which // allows us to load the Zetbox.Objects assemblies _before_ // they are needed. var launcher = container.Resolve<Launcher>(); launcher.Show(args); }