Example #1
0
 public RxAppTest()
 {
     RxApp.Initialize(new FakeDependencyResolverReactive());
 }
 static PropertyBindingMixins()
 {
     RxApp.EnsureInitialized();
     _binderImplementation = new PropertyBinderImplementation();
 }
Example #3
0
        public WixUiBootstrapper(IWiXEvents wixEvents, TinyIoCContainer testKernel = null, IRoutingState router = null)
        {
            Kernel = testKernel ?? createDefaultKernel();

            Kernel.Register <IWixUiBootstrapper>(this);
            Kernel.Register <IScreen>(this);
            Kernel.Register(wixEvents);

            Router    = router ?? new RoutingState();
            WiXEvents = wixEvents;

            _BundledRelease = new Lazy <ReleaseEntry>(readBundledReleasesFile);

            registerExtensionDlls(Kernel);

            RxApp.ConfigureServiceLocator(
                (type, contract) => Kernel.Resolve(type, contract),
                (type, contract) => Kernel.ResolveAll(type),
                (c, t, s) => Kernel.Register(t, c, s));

            UserError.RegisterHandler(ex => {
                if (wixEvents.Command.Display != Display.Full)
                {
                    this.Log().Error(ex.ErrorMessage);
                    wixEvents.ShouldQuit();
                }

                var errorVm   = RxApp.GetService <IErrorViewModel>();
                errorVm.Error = ex;
                Router.Navigate.Execute(errorVm);

                return(Observable.Return(RecoveryOptionResult.CancelOperation));
            });

            var bundledPackageMetadata = openBundledPackage();

            wixEvents.DetectPackageCompleteObs.Subscribe(eventArgs => {
                var error = convertHResultToError(eventArgs.Status);
                if (error != null)
                {
                    UserError.Throw(error);
                    return;
                }

                // TODO: If the app is already installed, run it and bail

                if (wixEvents.Command.Action == LaunchAction.Uninstall)
                {
                    var updateManager = new UpdateManager("http://lol", BundledRelease.PackageName, FrameworkVersion.Net40);

                    var updateLock = updateManager.AcquireUpdateLock();
                    updateManager.FullUninstall()
                    .ObserveOn(RxApp.DeferredScheduler)
                    .Log(this, "Full uninstall")
                    .Finally(updateLock.Dispose)
                    .Subscribe(
                        _ => wixEvents.Engine.Plan(LaunchAction.Uninstall),
                        ex => UserError.Throw("Failed to uninstall application", ex),
                        () => wixEvents.ShouldQuit());

                    return;
                }

                if (wixEvents.Command.Action == LaunchAction.Install)
                {
                    if (wixEvents.Command.Display != Display.Full)
                    {
                        wixEvents.Engine.Plan(LaunchAction.Install);
                        return;
                    }

                    var welcomeVm             = RxApp.GetService <IWelcomeViewModel>();
                    welcomeVm.PackageMetadata = bundledPackageMetadata;
                    welcomeVm.ShouldProceed.Subscribe(_ => wixEvents.Engine.Plan(LaunchAction.Install));

                    Router.Navigate.Execute(welcomeVm);
                }
            });

            wixEvents.PlanCompleteObs.Subscribe(eventArgs => {
                var error = convertHResultToError(eventArgs.Status);
                if (error != null)
                {
                    UserError.Throw(error);
                    return;
                }

                if (wixEvents.Command.Action != LaunchAction.Install)
                {
                    wixEvents.Engine.Apply(wixEvents.MainWindowHwnd);
                    return;
                }

                // NB: Create a dummy subject to receive progress if we're in silent mode
                IObserver <int> progress = new Subject <int>();
                if (wixEvents.Command.Display == Display.Full)
                {
                    var installingVm             = RxApp.GetService <IInstallingViewModel>();
                    progress                     = installingVm.ProgressValue;
                    installingVm.PackageMetadata = bundledPackageMetadata;
                    Router.Navigate.Execute(installingVm);
                }

                // NB: This bit of code is a bit clever. The binaries that WiX
                // has installed *itself* meets the qualifications for being a
                // Shimmer update directory (a RELEASES file and the corresponding
                // NuGet packages).
                //
                // So, in order to reuse some code and not write the same things
                // twice we're going to "Eigenupdate" from our own directory;
                // UpdateManager will operate in bootstrap mode and create a
                // local directory for us.
                //
                // Then, we create a *new* UpdateManager whose target is the normal
                // update URL - we can then apply delta updates against the bundled
                // NuGet package to get up to vCurrent. The reason we go through
                // this rigamarole is so that developers don't have to rebuild the
                // installer as often (never, technically).

                var fxVersion    = determineFxVersionFromPackage(bundledPackageMetadata);
                var eigenUpdater = new UpdateManager(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), BundledRelease.PackageName, fxVersion);

                var eigenLock = eigenUpdater.AcquireUpdateLock();

                var eigenUpdateProgress = eigenUpdater.CheckForUpdate()
                                          .SelectMany(x => eigenUpdater.DownloadReleases(x.ReleasesToApply))
                                          .Finally(eigenLock.Dispose)
                                          .Select(x => x / 2)
                                          .Multicast(new Subject <int>());

                eigenUpdateProgress.Subscribe(progress);
                eigenUpdateProgress.Connect();

                var realUpdateProgress = eigenUpdateProgress.TakeLast(1)
                                         .SelectMany(_ => {
                    var realUpdateManager = new UpdateManager(bundledPackageMetadata.ProjectUrl.ToString(), BundledRelease.PackageName, fxVersion);

                    return(realUpdateManager.CheckForUpdate()
                           .SelectMany(updateInfo => {
                        return Observable.Concat(
                            realUpdateManager.DownloadReleases(updateInfo.ReleasesToApply).Select(x => x * 0.75),
                            realUpdateManager.ApplyReleases(updateInfo).Select(x => x * 0.25 + 75))
                        .Select(x => (int)x);
                    }).LoggedCatch(this, Observable.Return(100), "Failed to update to latest remote version"));
                })
                                         .Select(x => x / 2 + 50)
                                         .Multicast(new Subject <int>());

                realUpdateProgress.Subscribe(progress);
                realUpdateProgress.Connect();

                realUpdateProgress
                .TakeLast(1)
                .ObserveOn(RxApp.DeferredScheduler)
                .Subscribe(
                    _ => wixEvents.Engine.Apply(wixEvents.MainWindowHwnd),
                    ex => UserError.Throw("Failed to install application", ex));
            });

            wixEvents.ApplyCompleteObs.Subscribe(eventArgs => {
                var error = convertHResultToError(eventArgs.Status);
                if (error != null)
                {
                    UserError.Throw(error);
                    return;
                }

                if (wixEvents.Command.Display != Display.Full)
                {
                    wixEvents.ShouldQuit();
                }

                // TODO: Figure out what the "main app" is and run it
            });

            wixEvents.ErrorObs.Subscribe(eventArgs => UserError.Throw("An installation error has occurred: " + eventArgs.ErrorMessage));
        }
Example #4
0
        static IObservable <WebResponse> MakeWebRequest(
            Uri uri,
            Dictionary <string, string> headers = null,
            string content   = null,
            int retries      = 3,
            TimeSpan?timeout = null)
        {
            IObservable <WebResponse> request;

            var hwr = WebRequest.Create(uri);

            if (headers != null)
            {
                foreach (var x in headers)
                {
                    hwr.Headers[x.Key] = x.Value;
                }
            }

#if !SILVERLIGHT
            if (RxApp.InUnitTestRunner())
            {
                request = Observable.Defer(() =>
                {
                    if (content == null)
                    {
                        return(Observable.Start(() => hwr.GetResponse(), RxApp.TaskpoolScheduler));
                    }

                    var buf = Encoding.UTF8.GetBytes(content);
                    return(Observable.Start(() =>
                    {
                        hwr.GetRequestStream().Write(buf, 0, buf.Length);
                        return hwr.GetResponse();
                    }, RxApp.TaskpoolScheduler));
                });
            }
            else
#endif
            {
                request = Observable.Defer(() =>
                {
                    if (content == null)
                    {
                        return(Observable.FromAsyncPattern <WebResponse>(hwr.BeginGetResponse, hwr.EndGetResponse)());
                    }

                    var buf = Encoding.UTF8.GetBytes(content);

                    // NB: You'd think that BeginGetResponse would never block,
                    // seeing as how it's asynchronous. You'd be wrong :-/
                    var ret = new AsyncSubject <WebResponse>();
                    Observable.Start(() =>
                    {
                        Observable.FromAsyncPattern <Stream>(hwr.BeginGetRequestStream, hwr.EndGetRequestStream)()
                        .SelectMany(x => x.WriteAsync(buf, 0, buf.Length))
                        .SelectMany(_ => Observable.FromAsyncPattern <WebResponse>(hwr.BeginGetResponse, hwr.EndGetResponse)())
                        .Multicast(ret).Connect();
                    }, RxApp.TaskpoolScheduler);

                    return(ret);
                });
            }

            return(request.Timeout(timeout ?? TimeSpan.FromSeconds(15), RxApp.TaskpoolScheduler).Retry(retries));
        }
Example #5
0
 public void DepPropNotifierShouldBeFound()
 {
     Assert.True(RxApp.GetAllServices <ICreatesObservableForProperty>()
                 .Any(x => x is DependencyObjectObservableForProperty));
 }
Example #6
0
 public string GetDefaultLocalMachineCacheDirectory()
 {
     return(RxApp.InUnitTestRunner() ?
            Path.Combine(GetAssemblyDirectoryName(), "LocalBlobCache") :
            Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), BlobCache.ApplicationName, "BlobCache"));
 }
 public SecondaryViewModel(IScreen hostScreen)
 {
     HostScreen = hostScreen ?? RxApp.GetService <IScreen>();
 }
Example #8
0
        public void IfAppIsAlreadyInstalledRunTheApp()
        {
            string dir, targetRootDirectory;

            using (Utility.WithTempDirectory(out targetRootDirectory))
                using (IntegrationTestHelper.WithFakeInstallDirectory(out dir))
                {
                    // install version 1
                    var firstKernel  = new TinyIoCContainer();
                    var firstFactory = new Mock <IProcessFactory>();
                    firstKernel.Register(firstFactory.Object);

                    var firstRouter        = new RoutingState();
                    var firstDetectPackage = new Subject <DetectPackageCompleteEventArgs>();
                    var firstPlanComplete  = new Subject <PlanCompleteEventArgs>();
                    var firstApplyComplete = new Subject <ApplyCompleteEventArgs>();
                    var firstError         = new Subject <ErrorEventArgs>();
                    var firstEngine        = new Mock <IEngine>();

                    var firstEvents = new Mock <IWiXEvents>();
                    firstEvents.SetupGet(x => x.DetectPackageCompleteObs).Returns(firstDetectPackage);
                    firstEvents.SetupGet(x => x.ErrorObs).Returns(firstError);
                    firstEvents.SetupGet(x => x.PlanCompleteObs).Returns(firstPlanComplete);
                    firstEvents.SetupGet(x => x.ApplyCompleteObs).Returns(firstApplyComplete);
                    firstEvents.SetupGet(x => x.Engine).Returns(firstEngine.Object);

                    firstEvents.SetupGet(x => x.DisplayMode).Returns(Display.Full);
                    firstEvents.SetupGet(x => x.Action).Returns(LaunchAction.Install);

                    var firstFixture = new WixUiBootstrapper(firstEvents.Object, firstKernel, firstRouter, null, dir, targetRootDirectory);
                    RxApp.GetAllServices <ICreatesObservableForProperty>().Any().ShouldBeTrue();

                    mockPerformInstall(firstRouter, firstDetectPackage, firstPlanComplete, firstApplyComplete, firstEngine);

                    // we expect that it opens the main exe
                    firstFactory.Verify(p => p.Start(It.IsAny <string>()), Times.Once());

                    // install version 1 again
                    var secondKernel  = new TinyIoCContainer();
                    var secondFactory = new Mock <IProcessFactory>();
                    secondKernel.Register(secondFactory.Object);

                    var secondRouter        = new RoutingState();
                    var secondDetectPackage = new Subject <DetectPackageCompleteEventArgs>();
                    var secondPlanComplete  = new Subject <PlanCompleteEventArgs>();
                    var secondApplyComplete = new Subject <ApplyCompleteEventArgs>();
                    var secondError         = new Subject <ErrorEventArgs>();
                    var secondEngine        = new Mock <IEngine>();

                    var secondEvents = new Mock <IWiXEvents>();
                    secondEvents.SetupGet(x => x.DetectPackageCompleteObs).Returns(secondDetectPackage);
                    secondEvents.SetupGet(x => x.ErrorObs).Returns(secondError);
                    secondEvents.SetupGet(x => x.PlanCompleteObs).Returns(secondPlanComplete);
                    secondEvents.SetupGet(x => x.ApplyCompleteObs).Returns(secondApplyComplete);
                    secondEvents.SetupGet(x => x.Engine).Returns(secondEngine.Object);

                    secondEvents.SetupGet(x => x.DisplayMode).Returns(Display.Full);
                    secondEvents.SetupGet(x => x.Action).Returns(LaunchAction.Install);

                    var secondFixture = new WixUiBootstrapper(secondEvents.Object, secondKernel, secondRouter, null, dir, targetRootDirectory);

                    mockPerformInstall(secondRouter, secondDetectPackage, secondPlanComplete, secondApplyComplete, secondEngine);

                    var folder = Path.Combine(targetRootDirectory, "SampleUpdatingApp", "app-1.1.0.0");
                    Assert.True(Directory.Exists(folder));

                    var exe = Path.Combine(folder, "SampleUpdatingApp.exe");

                    // we expect that it opens the main exe again
                    secondFactory.Verify(
                        p => p.Start(exe),
                        Times.Once(),
                        "We expect a process to be executed here, but it ain't...");
                }
        }
Example #9
0
 public TestsTreeView()
 {
     this.InitializeComponent();
     this.DataContext           = RxApp.GetService <ITestsTreeViewModel>();
     this.PerfTestConfiguration = this.GetPerfTestConfigurationFromSettings();
 }
Example #10
0
        public WixUiBootstrapper(
            IWiXEvents wixEvents,
            TinyIoCContainer testKernel   = null,
            IRoutingState router          = null,
            IFileSystemFactory fileSystem = null,
            string currentAssemblyDir     = null,
            string targetRootDirectory    = null)
        {
            Kernel                  = testKernel ?? createDefaultKernel();
            this.fileSystem         = fileSystem ?? AnonFileSystem.Default;
            this.currentAssemblyDir = currentAssemblyDir ?? Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);

            RxApp.ConfigureServiceLocator(
                (type, contract) => {
                this.Log().Debug("Resolving type '{0}' with contract '{1}'", type, contract);
                return(String.IsNullOrEmpty(contract)
                        ? Kernel.Resolve(type)
                        : Kernel.Resolve(type, contract));
            },
                (type, contract) => Kernel.ResolveAll(type, true),
                (c, t, s) => {
                this.Log().Debug("Registering type '{0}' for interface '{1}' and contract '{2}'", c, t, s);
                if (String.IsNullOrEmpty(s))
                {
                    Kernel.Register(t, c, Guid.NewGuid().ToString());
                }
                else
                {
                    Kernel.Register(t, c, s);
                }
            });

            RxRouting.ViewModelToViewFunc = findViewClassNameForViewModelName;

            Kernel.Register <IWixUiBootstrapper>(this);
            Kernel.Register <IScreen>(this);
            Kernel.Register(wixEvents);

            Router    = router ?? new RoutingState();
            WiXEvents = wixEvents;

            _BundledRelease = new Lazy <ReleaseEntry>(readBundledReleasesFile);

            registerExtensionDlls(Kernel);

            UserError.RegisterHandler(ex => {
                this.Log().ErrorException("Something unexpected happened", ex.InnerException);

                if (wixEvents.DisplayMode != Display.Full)
                {
                    this.Log().Error(ex.ErrorMessage);
                    wixEvents.ShouldQuit();
                }

                var errorVm   = RxApp.GetService <IErrorViewModel>();
                errorVm.Error = ex;
                errorVm.Shutdown.Subscribe(_ => wixEvents.ShouldQuit());
                errorVm.OpenLogsFolder.Subscribe(_ => openLogsFolder());

                RxApp.DeferredScheduler.Schedule(() => Router.Navigate.Execute(errorVm));
                return(Observable.Return(RecoveryOptionResult.CancelOperation));
            });

            bundledPackageMetadata = new Lazy <IPackage>(openBundledPackage);

            wixEvents.DetectPackageCompleteObs.Subscribe(eventArgs => {
                this.Log().Info("DetectPackageCompleteObs: got id: '{0}', state: '{1}', status: '{2}'", eventArgs.PackageId, eventArgs.State, eventArgs.Status);

                var error = convertHResultToError(eventArgs.Status);
                if (error != null)
                {
                    UserError.Throw(error);
                    return;
                }

                // we now have multiple applications in the chain
                // only run this code after the last entry in the chain
                if (eventArgs.PackageId != "UserApplicationId")
                {
                    return;
                }

                if (wixEvents.Action == LaunchAction.Uninstall)
                {
                    if (wixEvents.DisplayMode != Display.Full)
                    {
                        this.Log().Info("Squirrel is doing a silent uninstall! Sneaky!");
                        wixEvents.Engine.Plan(LaunchAction.Uninstall);
                        return;
                    }

                    this.Log().Info("Squirrel is doing an uninstall! Sadface!");
                    var uninstallVm = RxApp.GetService <IUninstallingViewModel>();
                    Router.Navigate.Execute(uninstallVm);
                    wixEvents.Engine.Plan(LaunchAction.Uninstall);
                    return;
                }

                // TODO: If the app is already installed, run it and bail
                // If Display is silent, we should just exit here.

                if (wixEvents.Action == LaunchAction.Install)
                {
                    if (wixEvents.DisplayMode != Display.Full)
                    {
                        this.Log().Info("Squirrel is doing a silent install! Sneaky!");
                        wixEvents.Engine.Plan(LaunchAction.Install);
                        return;
                    }

                    this.Log().Info("We are doing an UI install! Huzzah!");

                    var welcomeVm             = RxApp.GetService <IWelcomeViewModel>();
                    welcomeVm.PackageMetadata = bundledPackageMetadata.Value;
                    welcomeVm.ShouldProceed.Subscribe(_ => wixEvents.Engine.Plan(LaunchAction.Install));

                    // NB: WiX runs a "Main thread" that all of these events
                    // come back on, and a "UI thread" where it actually runs
                    // the WPF window. Gotta proxy to the UI thread.
                    RxApp.DeferredScheduler.Schedule(() => Router.Navigate.Execute(welcomeVm));
                }
            });

            var executablesToStart = Enumerable.Empty <string>();

            wixEvents.PlanCompleteObs.Subscribe(eventArgs => {
                this.Log().Info("PlanCompleteObs: got status: '{0}'", eventArgs.Status);

                var installManager = new InstallManager(BundledRelease, targetRootDirectory);
                var error          = convertHResultToError(eventArgs.Status);
                if (error != null)
                {
                    UserError.Throw(error);
                    return;
                }

                if (wixEvents.Action == LaunchAction.Uninstall)
                {
                    var task = installManager.ExecuteUninstall(BundledRelease.Version);
                    task.Subscribe(
                        _ => wixEvents.Engine.Apply(wixEvents.MainWindowHwnd),
                        ex => UserError.Throw(new UserError("Failed to uninstall", ex.Message, innerException: ex)));
                    // the installer can close before the uninstall is done
                    // which means the UpdateManager is not disposed correctly
                    // which means an error is thrown in the destructor
                    //
                    // let's wait for it to finish
                    //
                    // oh, and .Wait() is unnecesary here
                    // because the subscriber handles an exception
                    var result = task.FirstOrDefault();
                    return;
                }

                IObserver <int> progress = null;

                if (wixEvents.DisplayMode == Display.Full)
                {
                    var installingVm             = RxApp.GetService <IInstallingViewModel>();
                    progress                     = installingVm.ProgressValue;
                    installingVm.PackageMetadata = bundledPackageMetadata.Value;
                    RxApp.DeferredScheduler.Schedule(() => Router.Navigate.Execute(installingVm));
                }

                installManager.ExecuteInstall(this.currentAssemblyDir, bundledPackageMetadata.Value, progress).Subscribe(
                    toStart => {
                    executablesToStart = toStart ?? executablesToStart;
                    wixEvents.Engine.Apply(wixEvents.MainWindowHwnd);
                },
                    ex => UserError.Throw("Failed to install application", ex));
            });

            wixEvents.ApplyCompleteObs.Subscribe(eventArgs => {
                this.Log().Info("ApplyCompleteObs: got restart: '{0}', result: '{1}', status: '{2}'", eventArgs.Restart, eventArgs.Result, eventArgs.Status);

                var error = convertHResultToError(eventArgs.Status);
                if (error != null)
                {
                    UserError.Throw(error);
                    return;
                }

                if (wixEvents.DisplayMode == Display.Full && wixEvents.Action == LaunchAction.Install)
                {
                    var processFactory = Kernel.Resolve <IProcessFactory>();

                    foreach (var path in executablesToStart)
                    {
                        processFactory.Start(path);
                    }
                }

                wixEvents.ShouldQuit();
            });

            wixEvents.ErrorObs.Subscribe(
                eventArgs => {
                this.Log().Info("ErrorObs: got id: '{0}', result: '{1}', code: '{2}'", eventArgs.PackageId, eventArgs.Result, eventArgs.ErrorCode);
                UserError.Throw("An installation error has occurred: " + eventArgs.ErrorMessage);
            });

            wixEvents.Engine.Detect();
        }
 public ObservedChangedExtensionsTest()
 {
     RxApp.Initialize(new FakeDependencyResolverReactive());
 }
        public PlayViewModel(IScreen screen, ILoginMethods loginMethods)
        {
            HostScreen = screen;
            TogglePlay = new ReactiveCommand();
            Logout     = new ReactiveCommand();
            Search     = new ReactiveCommand();

            // XXX: God I hate that I have to do this
            Observable.Never <Song>().ToProperty(this, x => x.CurrentSong);
            Observable.Never <IEnumerable <Song> >().ToProperty(this, x => x.Queue);
            Observable.Never <IEnumerable <SongTileViewModel> >().ToProperty(this, x => x.AllSongs);

            this.WhenNavigatedTo(() => {
                var playApi = loginMethods.CurrentAuthenticatedClient;
                if (playApi == null)
                {
                    loginMethods.EraseCredentialsAndNavigateToLogin();
                    return(null);
                }

                // Get the Listen URL or die trying
                Observable.Defer(playApi.ListenUrl)
                .Timeout(TimeSpan.FromSeconds(30), RxApp.TaskpoolScheduler)
                .Retry()
                .ToProperty(this, x => x.ListenUrl);

                var pusherSubj = playApi.ConnectToSongChangeNotifications()
                                 .Retry(25)
                                 .Multicast(new Subject <Unit>());

                var shouldUpdate = Observable.Defer(() =>
                                                    pusherSubj.Take(1).Timeout(TimeSpan.FromMinutes(2.0), RxApp.TaskpoolScheduler)).Catch(Observable.Return(Unit.Default))
                                   .Repeat()
                                   .StartWith(Unit.Default)
                                   .Multicast(new Subject <Unit>());

                var nowPlaying = shouldUpdate.SelectMany(_ => playApi.NowPlaying()).Multicast(new Subject <Song>());
                shouldUpdate.SelectMany(_ => playApi.Queue())
                .Catch(Observable.Return(Enumerable.Empty <Song>()))
                .ToProperty(this, x => x.Queue);

                nowPlaying
                .Catch(Observable.Return(new Song()))
                .ToProperty(this, x => x.CurrentSong);

                this.WhenAny(x => x.CurrentSong, x => x.Queue,
                             (song, queue) => (queue.Value != null && song.Value != null ? queue.Value.StartWith(song.Value) : Enumerable.Empty <Song>()))
                .Do(x => this.Log().Info("Found {0} items", x.Count()))
                .Select(x => x.Select(y => new SongTileViewModel(y, loginMethods.CurrentAuthenticatedClient)
                {
                    QueueSongVisibility = Visibility.Collapsed
                }))
                .ToProperty(this, x => x.AllSongs);

                MessageBus.Current.RegisterMessageSource(this.WhenAny(x => x.IsPlaying, x => x.Value), "IsPlaying");

                var ret = new CompositeDisposable();
                ret.Add(nowPlaying.Connect());
                ret.Add(shouldUpdate.Connect());
                ret.Add(pusherSubj.Connect());
                return(ret);
            });

            Logout.Subscribe(_ => loginMethods.EraseCredentialsAndNavigateToLogin());
            Search.Subscribe(_ => screen.Router.Navigate.Execute(RxApp.GetService <ISearchViewModel>()));
        }
 public ReactiveNotifyPropertyChangedExtenionsTest()
 {
     RxApp.Initialize(new FakeDependencyResolverReactive());
 }
Example #14
0
 protected static string GetDefaultLocalMachineCacheDirectory()
 {
     return(RxApp.InUnitTestRunner() ?
            Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "LocalBlobCache") :
            Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), BlobCache.ApplicationName, "BlobCache"));
 }
 public MainViewModel(IScreen hostScreen)
 {
     HostScreen = hostScreen ?? RxApp.GetService <IScreen>();
 }
Example #16
0
 public static void Go <T>(this INavigateCommand This, string key = null)
     where T : IRoutableViewModel
 {
     This.Execute(RxApp.GetService <T>(key));
 }
 public App()
 {
     BlobCache.ApplicationName = "DataGridSerialization";
     RxApp.ConfigureServiceLocator((t, s) => null, (t, s) => null, (c, t, s) => { });
 }