/// <summary>
        /// Create a new event metric object from the provided raw data packet
        /// </summary>
        /// <param name="definitions">The definitions dictionary this definition is a part of</param>
        /// <param name="packet">The packet to create a definition from.</param>
        internal EventMetricDefinition(MetricDefinitionCollection definitions, MetricDefinitionPacket packet)
            : base(definitions, packet)
        {
            m_MetricValues = new EventMetricValueDefinitionCollection(this);

            //and we need to set that to our packet, all part of our bogus reach-around to make persistence work
            Packet.MetricValues = m_MetricValues;
        }
        /// <summary>
        /// Create a new event metric definition.
        /// </summary>
        /// <remarks>At any one time there should only be one metric definition with a given combination of
        /// metric type, category, and counter name.  These values together are used to correlate metrics
        /// between sessions.  The metric definition will <b>not</b> be automatically added to the provided collection.</remarks>
        /// <param name="definitions">The definitions dictionary this definition is a part of</param>
        /// <param name="metricTypeName">The unique metric type</param>
        /// <param name="categoryName">The name of the category with which this definition is associated.</param>
        /// <param name="counterName">The name of the definition within the category.</param>
        public EventMetricDefinition(MetricDefinitionCollection definitions, string metricTypeName, string categoryName, string counterName)
            : base(definitions, new EventMetricDefinitionPacket(metricTypeName, categoryName, counterName))
        {
            m_MetricValues = new EventMetricValueDefinitionCollection(this);

            //and we need to set that to our packet, all part of our bogus reach-around to make persistence work
            Packet.MetricValues = m_MetricValues;
        }