using Acr.UserDialogs; using Bit.App.Abstractions; using Bit.App.Repositories; using Bit.App.Services; using Bit.UWP.Services; using FFImageLoading.Forms.WinUWP; using Plugin.Connectivity; using Plugin.Fingerprint; using Plugin.Settings.Abstractions; using SimpleInjector; using System; using System.Collections.Generic; using System.Reflection; using Windows.ApplicationModel; using Windows.ApplicationModel.Activation; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Navigation; using XLabs.Ioc; using XLabs.Ioc.SimpleInjectorContainer; using FFImageLoading.Forms; namespace Bit.UWP { sealed partial class App : Application { public App() { InitializeComponent(); Suspending += OnSuspending; if(!Resolver.IsSet) { SetIoc(); } } public ISettings Settings { get; set; } protected override void OnLaunched(LaunchActivatedEventArgs e) { ZXing.Net.Mobile.Forms.WindowsUniversal.ZXingScannerViewRenderer.Init(); var rootFrame = Window.Current.Content as Frame; if(rootFrame == null) { rootFrame = new Frame(); rootFrame.NavigationFailed += OnNavigationFailed; var assembliesToInclude = new List() { typeof(CachedImage).GetTypeInfo().Assembly, typeof(CachedImageRenderer).GetTypeInfo().Assembly }; Xamarin.Forms.Forms.Init(e, assembliesToInclude); ((Style)Resources["TabbedPageStyle"]).Setters[0] = ((Style)Resources["TabbedPageStyle2"]).Setters[0]; if(e.PreviousExecutionState == ApplicationExecutionState.Terminated) { //TODO: Load state from previously suspended application } Window.Current.Content = rootFrame; } if(e.PrelaunchActivated == false) { if(rootFrame.Content == null) { rootFrame.Navigate(typeof(MainPage), e.Arguments); } Window.Current.Activate(); } } void OnNavigationFailed(object sender, NavigationFailedEventArgs e) { throw new Exception("Failed to load Page " + e.SourcePageType.FullName); } private void OnSuspending(object sender, SuspendingEventArgs e) { var deferral = e.SuspendingOperation.GetDeferral(); //TODO: Save application state and stop any background activity deferral.Complete(); } private void SetIoc() { var container = new Container(); // Services container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); // Repositories container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); // Other container.RegisterSingleton(CrossConnectivity.Current); container.RegisterSingleton(UserDialogs.Instance); container.RegisterSingleton(CrossFingerprint.Current); container.RegisterSingleton(Plugin.Settings.CrossSettings.Current); // Push container.RegisterSingleton(); container.RegisterSingleton(); CachedImageRenderer.Init(); Resolver.SetResolver(new SimpleInjectorResolver(container)); } } }