Skip to content

Instantly share code, notes, and snippets.

@merken
Created March 30, 2020 15:14
Show Gist options
  • Save merken/3c542a38f863cc9828200ead92bc28ba to your computer and use it in GitHub Desktop.
Save merken/3c542a38f863cc9828200ead92bc28ba to your computer and use it in GitHub Desktop.
LoggerProxy.cs
using System;
using System.Reflection;
namespace MyApp
{
public class LoggerProxy : DispatchProxy
{
private object remote;
public LoggerProxy SetRemoteObject(object remote)
{
this.remote = remote;
return this;
}
protected override object Invoke(MethodInfo targetMethod, object[] args)
{
var originalConsoleColor = Console.ForegroundColor;
Console.ForegroundColor = ConsoleColor.Green;
var now = DateTime.Now;
Console.WriteLine($"Calling method {targetMethod.Name} on {this.remote} at {now.ToLongTimeString()}:{now.Millisecond}");
var methodOnRemote = this.remote.GetType().GetMethod(targetMethod.Name);
var remoteResult = methodOnRemote.Invoke(this.remote, args);
var elapsed = DateTime.Now;
Console.WriteLine($"Called method {targetMethod.Name} on {this.remote} and result was {remoteResult} at {elapsed.ToLongTimeString()}:{elapsed.Millisecond}. Total time in ms: {(elapsed - now).TotalMilliseconds}");
Console.ForegroundColor = originalConsoleColor;
return remoteResult;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment