private void ExecutePipe(IFilterAndPipe <T> filter, T item)
 {
     try
     {
         if (filter.CanFilterItem(item))
         {
             filter.Pipe(item);
         }
     }
     catch (Exception e)
     {
         FilterExceptionEventArgs eventArgs = new FilterExceptionEventArgs(Name)
         {
             Exception = e
         };
         FilterExceptionEncountered?.Invoke(this, eventArgs);
     }
 }
        private void ExecuteFilter(T item)
        {
            try
            {
                Filter(item);
                FilterCompleteEventArgs eventArgs = new FilterCompleteEventArgs(Name);
                eventArgs.Message += $"Complete";

                FilterCompleted?.Invoke(this, eventArgs);
            }
            catch (Exception e)
            {
                FilterExceptionEventArgs eventArgs = new FilterExceptionEventArgs(Name)
                {
                    Exception = e
                };

                FilterExceptionEncountered?.Invoke(this, eventArgs);
            }
        }
 private void NextFilter_FilterExceptionEncountered(object sender, EventArgs e)
 {
     FilterExceptionEncountered?.Invoke(this, e);
 }