/// <summary> /// Initializes the proxy domain loader. /// </summary> /// <param name="source">The source.</param> public void Initialize(string source) { this.proxyDomain.Initialize(source); Trace.Listeners.Add(this.delegateTraceListener); CrossDomainTraceHelper.StartListening(this.appDomainHelper.AppDomain, this.textWriter); }
private void Register(CrossDomainTraceHelper parentDomain, TextWriter parentConsoleWriter) { // Store the parent domain to pass messages to later this.parentDomain = parentDomain; // Create and register the delegate trace listener var traceListener = new DelegateTraceListener(this.TraceWrite, this.TraceWriteLine); Trace.Listeners.Add(traceListener); Console.SetOut(parentConsoleWriter); }
/// <summary> /// Starts listening for trace messages on the specified application domain. /// </summary> /// <param name="domain">The domain.</param> /// <param name="consoleWriter">The console writer.</param> public static void StartListening(AppDomain domain, TextWriter consoleWriter) { var listenerType = typeof(CrossDomainTraceHelper); // Create a remote instance var remoteHelper = (CrossDomainTraceHelper)domain.CreateInstanceAndUnwrap( listenerType.Assembly.FullName, listenerType.FullName); // Create a local instance var localHelper = new CrossDomainTraceHelper(); // Register the local helper in the remote domain remoteHelper.Register(localHelper, consoleWriter); }