public class CustomLogger : DispatchProxy where T : class
{
private readonly ILogger _logger;
private T target;
protected override object Invoke
(MethodInfo targetMethod, object() args)
{
throw new NotImplementedException();
}
public static T Create(T target)
{
throw new NotImplementedException();
}
}
A classe CustomLogger mostrada no código anterior usa Serilog para registrar dados neste exemplo. O trecho de código a seguir mostra como você pode atualizar o método Invoke que criamos na classe MyClassDispatchProxy anteriormente para incorporar recursos de log.
protected override object Invoke
(MethodInfo targetMethod, object() args)
{
if(targetMethod == null)
throw new ArgumentNullException(nameof(targetMethod));
_logger.Information($"Entering method: {targetMethod.Name}...");
var result = targetMethod.Invoke(target, args);
_logger.Information($"Exiting method: {targetMethod.Name}...");
return result;
}
Observe como as chamadas de método são registradas antes e depois da invocação no método Invoke. Se a instância targetMethod for nula, o método Invoke lançará uma exceção. No método Create, criamos uma nova instância do CustomLogger