public FailedMessageInformation(
            IMessageInformation info,
            FailedMessageQueueAction action,
            FailedMessageReason reason,
            Exception exception
            )
        {
            if (info == null)
            {
                throw new ArgumentNullException("info");
            }

            if (exception != null)
            {
                while (exception is TargetInvocationException && exception.InnerException != null)
                {
                    exception = exception.InnerException;
                }
            }

            _info        = info;
            FailedAction = action;
            FailedReason = reason;
            Exception    = exception;
        }
        public FailedMessageInformation(
            IMessageInformation info,
            FailedMessageQueueAction action,
            FailedMessageReason reason,
            Exception exception
        )
        {
            if (info == null)
                throw new ArgumentNullException("info");

            if (exception != null)
            {
                while (exception is TargetInvocationException && exception.InnerException != null)
                    exception = exception.InnerException;
            }

            _info = info;
            FailedAction = action;
            FailedReason = reason;
            Exception = exception;
        }