public ModificationImportController(IPofSerializer pofSerializer, string repositoriesDirectory, TemporaryFileService temporaryFileService, ExeggutorService exeggutorService, ModificationComponentFactory modificationComponentFactory, IFileSystemProxy fileSystemProxy, RiotSolutionLoader riotSolutionLoader, ModificationImportViewModelFactory modificationImportViewModelFactory, ObservableCollection<ModificationViewModel> modificationViewModels, ModificationLoader modificationLoader, LeagueBuildUtilities leagueBuildUtilities)
 {
     this.pofSerializer = pofSerializer;
      this.repositoriesDirectory = repositoriesDirectory;
      this.temporaryFileService = temporaryFileService;
      this.exeggutorService = exeggutorService;
      this.modificationComponentFactory = modificationComponentFactory;
      this.fileSystemProxy = fileSystemProxy;
      this.riotSolutionLoader = riotSolutionLoader;
      this.modificationImportViewModelFactory = modificationImportViewModelFactory;
      this.modificationViewModels = modificationViewModels;
      this.modificationLoader = modificationLoader;
      this.leagueBuildUtilities = leagueBuildUtilities;
 }
        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);
        }