public DateTimeRange Parse(string input)
        {
            if (ExistsCachedValue(cacheValue: input))
            {
                return(_cachedValues[key : input]);
            }

            DateTimeRangeCalculatorBase calculation = GetImplementationByInput(input: input);

            if (calculation == null)
            {
                return(DateTimeRange.Empty);
            }

            DateTimeRange calculatedValue = calculation.CalculateFromInput(input: input);

            AddCalculatedValueToCache(
                input: input,
                calculatedValue: calculatedValue);

            OnRaisedCalculation(
                raisedCalculationEventArgs: new RaisedCalculationEventArgs(
                    dateTimeRangeCalculatorBase: calculation));

            return(calculatedValue);
        }
        public override bool Equals(object obj)
        {
            DateTimeRangeCalculatorBase other = obj as DateTimeRangeCalculatorBase;

            return(Name == other?.Name);
        }
 public RaisedCalculationEventArgs(DateTimeRangeCalculatorBase dateTimeRangeCalculatorBase)
 {
     RaisedCalculator = dateTimeRangeCalculatorBase;
 }