Created
March 30, 2020 15:14
-
-
Save merken/3c542a38f863cc9828200ead92bc28ba to your computer and use it in GitHub Desktop.
LoggerProxy.cs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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