/// <summary />
        /// <param name="pipelineType"></param>
        /// <param name="aggregationKindMoniker"></param>
        /// <param name="converter"></param>
        public void Add(Type pipelineType, string aggregationKindMoniker, IMetricAggregateToTelemetryPipelineConverter converter)
        {
            ValidateKeys(pipelineType, aggregationKindMoniker);
            Util.ValidateNotNull(converter, nameof(converter));

            ConcurrentDictionary <string, IMetricAggregateToTelemetryPipelineConverter> converters = _pipelineTable.GetOrAdd(
                pipelineType,
                new ConcurrentDictionary <string, IMetricAggregateToTelemetryPipelineConverter>());

            converters[aggregationKindMoniker] = converter;
        }
        /// <summary />
        /// <param name="pipelineType"></param>
        /// <param name="aggregationKindMoniker"></param>
        /// <param name="converter"></param>
        /// <returns></returns>
        public bool TryGet(Type pipelineType, string aggregationKindMoniker, out IMetricAggregateToTelemetryPipelineConverter converter)
        {
            ValidateKeys(pipelineType, aggregationKindMoniker);

            ConcurrentDictionary <string, IMetricAggregateToTelemetryPipelineConverter> converters;

            if (false == _pipelineTable.TryGetValue(pipelineType, out converters))
            {
                converter = null;
                return(false);
            }

            bool hasConverter = converters.TryGetValue(aggregationKindMoniker, out converter);

            return(hasConverter);
        }