public UnitTestAnimations(Lifetime lifetime, IUnitTestSessionConductor sessionConductor,
                                  IUnitTestResultManager resultsManager, Agent agent, IThreading threading)
        {
            this.resultsManager = resultsManager;
            this.agent          = agent;
            this.threading      = threading;
            var testSessionLifetimes = new Dictionary <IUnitTestSessionTreeViewModel, LifetimeDefinition>();

            sessionConductor.SessionOpened.Advise(lifetime, sessionView =>
            {
                var sessionLifetimeDefinition = Lifetimes.Define(lifetime, "Clippy::TestSession");
                testSessionLifetimes.Add(sessionView, sessionLifetimeDefinition);

                SubscribeToSessionLaunch(sessionLifetimeDefinition.Lifetime, sessionView.Session);
            });

            sessionConductor.SessionClosed.Advise(lifetime, sessionView =>
            {
                LifetimeDefinition sessionLifetimeDefinition;
                if (testSessionLifetimes.TryGetValue(sessionView, out sessionLifetimeDefinition))
                {
                    sessionLifetimeDefinition.Terminate();
                    testSessionLifetimes.Remove(sessionView);
                }
            });
        }
        public TestRunEventGenerator(Lifetime lifetime,
                                     IUnitTestSessionConductor sessionManager,
                                     IUnitTestResultManager resultManager,
                                     IThreading threading,
                                     IRSEnv env,
                                     IMessageBus messageBus,
                                     IDateUtils dateUtils)
            : base(env, messageBus, dateUtils, threading)
        {
            _resultManager = resultManager;
            _threading     = threading;

            var testSessionLifetimes = new Dictionary <IUnitTestSessionTreeViewModelBase, LifetimeDefinition>();

            sessionManager.SessionOpened.Advise(
                lifetime,
                sessionView =>
            {
                var sessionLifetimeDefinition =
                    Lifetimes.Define(lifetime, "KaVE::TestRunEventGenerator");
                testSessionLifetimes.Add(sessionView, sessionLifetimeDefinition);

                SubscribeToSessionLaunch(sessionLifetimeDefinition.Lifetime, sessionView.Session);
            });

            sessionManager.SessionClosed.Advise(
                lifetime,
                sessionView =>
            {
                LifetimeDefinition sessionLifetimeDefinition;
                if (testSessionLifetimes.TryGetValue(sessionView, out sessionLifetimeDefinition))
                {
                    sessionLifetimeDefinition.Terminate();
                    testSessionLifetimes.Remove(sessionView);
                }
            });
        }