示例#1
0
        public ProjectNotifier(ISolutionNotifier solutionNotifier, IProjectEnumerator projectEnumerator)
        {
            var hotProjectStream = solutionNotifier.SolutionOpenedStream.Select(solutionInfo =>
            {
                var projectInfos = projectEnumerator.GetLoadedProjects(solutionInfo);

                var solutionChangeStream = solutionNotifier.ProjectAddedStream
                                           .Merge(solutionNotifier.ProjectRemovingtream)
                                           .TakeUntil(solutionNotifier.SolutionClosingStream);

                var emptyProjectInfos = new ProjectInfo[0];

                var solutionClosedStream = solutionNotifier.SolutionClosingStream
                                           .Select(_ => emptyProjectInfos);

                var projectChangeStream = solutionChangeStream
                                          .Select(_ => projectEnumerator.GetLoadedProjects(solutionInfo))
                                          .Merge(solutionClosedStream)
                                          .StartWith(projectInfos);

                return(projectChangeStream);
            })
                                   .Switch()
                                   .Replay(1);

            hotProjectStream.Connect().DisposeWith(disposables);

            ProjectStream = hotProjectStream;
        }
示例#2
0
        public void it_should_notify_projects_when_solution_opened()
        {
            projectEnumerator.GetLoadedProjects(someSolution).Returns(someProjectInfos);

            solutionOpenedStream.OnNext(someSolution);

            testProjectObserver.Messages.Should().HaveCount(1);

            testProjectObserver.Messages.Single().Value.Value.Should().BeSameAs(someProjectInfos);
        }