/// <summary>
        /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
        /// </summary>
        public void Dispose()
        {
            lock (this)
            {
                if (!Disposed)
                {
                    Disposed = true;
                    GC.SuppressFinalize(this);

                    _exceptionLogPublisher?.Dispose();
                    _exceptionLogPublisher = null;
                }
            }
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="ExceptionLogPublisher"/> class.
        /// </summary>
        /// <param name="parameters">The parameters.</param>
        /// <param name="args">The arguments.</param>
        /// <exception cref="System.ArgumentException">logType</exception>
        /// <exception cref="TypeAccessException"></exception>
        public ExceptionLogPublisher(NameValueCollection parameters, params object[] args)
        {
            Disposed = false;
            _exceptionLogPublisher = null;

            var type = parameters["logType"];

            if (string.IsNullOrWhiteSpace(type))
            {
                throw new ArgumentException(string.Format("ExceptionLogPublisher: cannot find logType attribute for the following named instance: '{0}'", parameters["name"]), "logType");
            }

            var objectType = Type.GetType(type);

            if (objectType == null)
            {
                throw new TypeAccessException(string.Format("Unable to locate class type '{0}' for the following named instance: '{1}'", type, parameters["name"]));
            }

            _exceptionLogPublisher = ClassFactoryActivator.CreateInstance <IExceptionLogPublisher>(objectType, parameters);
        }