/// <summary>
        /// Construye una copia del formateador de mensajes.
        /// </summary>
        /// <remarks>
        /// El formateador del cabezal de los mensajes y los formateadores
        /// de campo no son copiados, al nuevo formateador de mensajes
        /// se le asignan solo referencias, es decir, el formateador que se
        /// clona y el formateador clonado comparten estos objetos.
        /// </remarks>
        /// <returns>
        /// Una copia exacta del formateador de mensajes.
        /// </returns>
        public virtual object Clone()
        {
            BasicMessageFormatter formatter = new BasicMessageFormatter();

            CopyTo(formatter);

            return(formatter);
        }
        /// <summary>
        /// Copia el formateador sobre el que se invoca este método
        /// en otro dado.
        /// </summary>
        /// <param name="messageFormatter">
        /// Es el formateador al que se copia la información del
        /// formateador sobre el que se invoca este método.
        /// </param>
        /// <remarks>
        /// El formateador del cabezal de los mensajes y los formateadores
        /// de campo no son copiados, al formateador de mensajes dado
        /// se le asignan solo referencias, es decir, el formateador que se
        /// copia en el formateador dado comparten estos objetos.
        /// </remarks>
        public virtual void CopyTo(BasicMessageFormatter messageFormatter)
        {
            messageFormatter.Description            = _description;
            messageFormatter.Logger                 = _logger;
            messageFormatter.Name                   = _name;
            messageFormatter.MessageHeaderFormatter = _headerFormatter;

            // TODO - Sincronizar la colección.
            lock ( _fieldsFormatters) {
                foreach (FieldFormatter fieldFormatter in _fieldsFormatters)
                {
                    messageFormatter.FieldFormatters.Add(fieldFormatter);
                }
            }
        }