/// <summary>
        /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
        /// </summary>
        public void Dispose()
        {
            if (this.textWriter != null)
            {
                this.textWriter.Flush();
                this.textWriter.Dispose();
            }

            if (this.proxyDomain != null)
            {
                this.proxyDomain.Dispose();
                this.proxyDomain = null;
            }

            if (this.delegateTraceListener != null)
            {
                if (Trace.Listeners.Contains(this.delegateTraceListener))
                {
                    Trace.Listeners.Remove(this.delegateTraceListener);
                }
            }

            if (this.appDomainHelper != null)
            {
                this.appDomainHelper.Dispose();
                this.appDomainHelper = null;
            }
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="AssemblyLoader" /> class.
        /// </summary>
        /// <param name="logger">The logger.</param>
        public AssemblyLoader(IMessageLogger logger)
        {
            this.textWriter = new TextWriterLogger(logger);

            this.appDomainHelper = new AppDomainHelper();

            this.delegateTraceListener = new DelegateTraceListener(
                message => logger.SendMessage(TestMessageLevel.Informational, message));

            this.proxyDomain = this.appDomainHelper.CreateInstance <ProxyLoader>();
        }