private void UserInterfaceThreadStart()
        {
            var clientConfiguration  = ryu.Get <IClientConfiguration>();
            var fileSystemProxy      = ryu.Get <IFileSystemProxy>();
            var driveNodeFactory     = new DriveNodeFactory(ryu.Get <IStreamFactory>());
            var pofContext           = ryu.Get <IPofContext>();
            var pofSerializer        = ryu.Get <IPofSerializer>();
            var temporaryFileService = ryu.Get <ServiceClient>().GetService <TemporaryFileService>();
            var exeggutorService     = ryu.Get <ServiceClient>().GetService <ExeggutorService>();
            var riotSolutionLoader   = ryu.Get <RiotSolutionLoader>();
            var modificationLoader   = ryu.Get <ModificationLoader>();
            var leagueBuildUtilities = ryu.Get <LeagueBuildUtilities>();

            application = Application.Current ?? new Application();
            var dispatcher = application.Dispatcher;
            var window     = new MainWindow();

            var repositoriesDirectory = Path.Combine(clientConfiguration.UserDataDirectoryPath, kRepositoryDirectoryName);

            var modificationImportViewModelFactory = new ModificationImportViewModelFactory(fileSystemProxy, driveNodeFactory);
            ModificationComponentFactory modificationComponentFactory           = new ModificationComponentFactory(fileSystemProxy, pofContext, new SlotSourceFactoryImpl(), pofSerializer);
            ObservableCollection <ModificationViewModel> modificationViewModels = new ObservableCollection <ModificationViewModel>();
            var rootViewModelCommandFactory     = new ModificationImportController(pofSerializer, repositoriesDirectory, temporaryFileService, exeggutorService, modificationComponentFactory, fileSystemProxy, riotSolutionLoader, modificationImportViewModelFactory, modificationViewModels, modificationLoader, leagueBuildUtilities);
            var modificationListingSynchronizer = new ModificationListingSynchronizer(pofSerializer, fileSystemProxy, clientConfiguration, temporaryFileService, exeggutorService, modificationLoader, modificationViewModels, leagueBuildUtilities);

            modificationListingSynchronizer.Initialize();
            var rootViewModel = new RootViewModel(rootViewModelCommandFactory, window, modificationViewModels);

            window.DataContext = rootViewModel;
            application.Run(window);
            host?.Shutdown(ShutdownReason.None);
        }
        private void UserInterfaceThreadStart()
        {
            var clientConfiguration = ryu.Get<IClientConfiguration>();
             var fileSystemProxy = ryu.Get<IFileSystemProxy>();
             var driveNodeFactory = new DriveNodeFactory(ryu.Get<IStreamFactory>());
             var pofContext = ryu.Get<IPofContext>();
             var pofSerializer = ryu.Get<IPofSerializer>();
             var temporaryFileService = ryu.Get<ServiceClient>().GetService<TemporaryFileService>();
             var exeggutorService = ryu.Get<ServiceClient>().GetService<ExeggutorService>();
             var riotSolutionLoader = ryu.Get<RiotSolutionLoader>();
             var modificationLoader = ryu.Get<ModificationLoader>();
             var leagueBuildUtilities = ryu.Get<LeagueBuildUtilities>();

             application = Application.Current ?? new Application();
             var dispatcher = application.Dispatcher;
             var window = new MainWindow();

             var repositoriesDirectory = Path.Combine(clientConfiguration.UserDataDirectoryPath, kRepositoryDirectoryName);

             var modificationImportViewModelFactory = new ModificationImportViewModelFactory(fileSystemProxy, driveNodeFactory);
             ModificationComponentFactory modificationComponentFactory = new ModificationComponentFactory(fileSystemProxy, pofContext, new SlotSourceFactoryImpl(), pofSerializer);
             ObservableCollection<ModificationViewModel> modificationViewModels = new ObservableCollection<ModificationViewModel>();
             var rootViewModelCommandFactory = new ModificationImportController(pofSerializer, repositoriesDirectory, temporaryFileService, exeggutorService, modificationComponentFactory, fileSystemProxy, riotSolutionLoader, modificationImportViewModelFactory, modificationViewModels, modificationLoader, leagueBuildUtilities);
             var modificationListingSynchronizer = new ModificationListingSynchronizer(pofSerializer, fileSystemProxy, clientConfiguration, temporaryFileService, exeggutorService, modificationLoader, modificationViewModels, leagueBuildUtilities);
             modificationListingSynchronizer.Initialize();
             var rootViewModel = new RootViewModel(rootViewModelCommandFactory, window, modificationViewModels);
             window.DataContext = rootViewModel;
             application.Run(window);
             host?.Shutdown(ShutdownReason.None);
        }