public PerformanceTelemetryPayloadFactory(
            IErrorContextFactory errorContextFactory,
            ITelemetryLogger logger,
            IThreadIdProvider threadIdProvider,
            IPerformanceContainer container)
        {
            if (errorContextFactory == null)
            {
                throw new ArgumentNullException("errorContextFactory");
            }
            if (logger == null)
            {
                throw new ArgumentNullException("logger");
            }
            if (threadIdProvider == null)
            {
                throw new ArgumentNullException("threadIdProvider");
            }
            if (container == null)
            {
                throw new ArgumentNullException("container");
            }

            _errorContextFactory = errorContextFactory;
            _logger = logger;
            _threadIdProvider = threadIdProvider;
            _container = container;
        }
        public PerformanceTelemetryPayload(
            IErrorContext errorContext,
            ITelemetryLogger logger,
            IThreadIdProvider threadIdProvider,
            IPerformanceContainer container,
            string className,
            string methodName)
        {
            if (errorContext == null)
            {
                throw new ArgumentNullException("errorContext");
            }
            if (logger == null)
            {
                throw new ArgumentNullException("logger");
            }
            if (threadIdProvider == null)
            {
                throw new ArgumentNullException("threadIdProvider");
            }
            if (container == null)
            {
                throw new ArgumentNullException("container");
            }
            if (className == null)
            {
                throw new ArgumentNullException("className");
            }
            if (methodName == null)
            {
                throw new ArgumentNullException("methodName");
            }

            this._errorContext = errorContext;
            this._logger = logger;
            this._container = container;

            this._manageThreadId = threadIdProvider.GetCurrentThreadId();

            this._record = _container.OpenPerformanceSession(
                this._manageThreadId,
                className,
                methodName);
        }