public ParameterIdentificationFeedback GetFeedbackFor(ParameterIdentification parameterIdentification)
 {
     lock (_locker)
     {
         var feedback = _cache[parameterIdentification];
         if (feedback == null)
         {
             feedback = new ParameterIdentificationFeedback(parameterIdentification);
             _cache.Add(parameterIdentification, feedback);
         }
         return(feedback);
     }
 }
        public void Edit(ParameterIdentificationFeedback parameterIdentificationFeedback)
        {
            _parameterIdentificationFeedback = parameterIdentificationFeedback;

            switch (parameterIdentificationFeedback.RunStatus)
            {
            case RunStatusId.Running:
                setParameterIdentificationToStarted(parameterIdentificationFeedback.ParameterIdentification);
                break;

            case RunStatusId.Canceled:
                // Presenter was opened after the events were triggered but actually a terminated
                // event is triggered after a started event was triggered and the feedback view
                // should evolve through both of them. If terminated is invoked directly, then the
                // view would should its initial state asking the user to start the parameter identification
                // instead of showing the terminated parameter identification and its last state.
                setParameterIdentificationToStarted(parameterIdentificationFeedback.ParameterIdentification);
                setParameterIdentificationToTerminated();
                break;
            }

            _view.Display();
        }