diff --git a/Engine.Core/Helpers/Event.cs b/Engine.Core/Helpers/Event.cs index 1186593..570af86 100644 --- a/Engine.Core/Helpers/Event.cs +++ b/Engine.Core/Helpers/Event.cs @@ -131,8 +131,7 @@ public class Event catch (Exception exception) { string methodCallRepresentation = $"{listeners[i].Callback.Method.DeclaringType?.FullName}.{listeners[i].Callback.Method.Name}()"; - Logger.LogError(this, $"Unexpected exception on invocation of method {methodCallRepresentation}:{Environment.NewLine}{exception.InnerException}"); - Logger.LogException(this, exception); + EventHelpers.LogInvocationException(listeners[i].Callback.Target ?? this, Logger, exception, methodCallRepresentation); } for (int i = onceListeners.Count - 1; i >= 0; i--) @@ -141,8 +140,7 @@ public class Event catch (Exception exception) { string methodCallRepresentation = $"{onceListeners[i].Callback.Method.DeclaringType?.FullName}.{onceListeners[i].Callback.Method.Name}()"; - Logger.LogError(this, $"Unexpected exception on invocation of method {methodCallRepresentation}:{Environment.NewLine}{exception.InnerException}"); - Logger.LogException(this, exception); + EventHelpers.LogInvocationException(onceListeners[i].Callback.Target ?? this, Logger, exception, methodCallRepresentation); } onceListeners.RemoveAt(i); } @@ -293,8 +291,7 @@ public class Event where TSender : class catch (Exception exception) { string methodCallRepresentation = $"{listeners[i].Callback.Method.DeclaringType?.FullName}.{listeners[i].Callback.Method.Name}({sender})"; - Logger.LogError(sender, $"Unexpected exception on invocation of method {methodCallRepresentation}:{Environment.NewLine}{exception.InnerException}"); - Logger.LogException(sender, exception); + EventHelpers.LogInvocationException(listeners[i].Callback.Target ?? sender, Logger, exception, methodCallRepresentation); } for (int i = onceListeners.Count - 1; i >= 0; i--) @@ -303,8 +300,7 @@ public class Event where TSender : class catch (Exception exception) { string methodCallRepresentation = $"{onceListeners[i].Callback.Method.DeclaringType?.FullName}.{onceListeners[i].Callback.Method.Name}({sender})"; - Logger.LogError(sender, $"Unexpected exception on invocation of method {methodCallRepresentation}:{Environment.NewLine}{exception.InnerException}"); - Logger.LogException(sender, exception); + EventHelpers.LogInvocationException(onceListeners[i].Callback.Target ?? sender, Logger, exception, methodCallRepresentation); } onceListeners.RemoveAt(i); } @@ -462,9 +458,8 @@ public class Event where TSender : class try { listeners[i].Callback.Invoke(sender, args); } catch (Exception exception) { - string methodCallRepresentation = $"{listeners[i].Callback.Method.DeclaringType?.FullName}.{listeners[i].Callback.Method.Name}({string.Join(", ", sender, args)})"; - Logger.LogError(sender, $"Unexpected exception on invocation of method {methodCallRepresentation}:{Environment.NewLine}{exception.InnerException}"); - Logger.LogException(sender, exception); + string methodCallRepresentation = $"{listeners[i].Callback.Method.DeclaringType?.FullName}.{listeners[i].Callback.Method.Name}({sender}, {args})"; + EventHelpers.LogInvocationException(listeners[i].Callback.Target ?? sender, Logger, exception, methodCallRepresentation); } for (int i = onceListeners.Count - 1; i >= 0; i--) @@ -472,9 +467,8 @@ public class Event where TSender : class try { onceListeners[i].Callback.Invoke(sender, args); } catch (Exception exception) { - string methodCallRepresentation = $"{onceListeners[i].Callback.Method.DeclaringType?.FullName}.{onceListeners[i].Callback.Method.Name}({string.Join(", ", sender, args)})"; - Logger.LogError(sender, $"Unexpected exception on invocation of method {methodCallRepresentation}:{Environment.NewLine}{exception.InnerException}"); - Logger.LogException(sender, exception); + string methodCallRepresentation = $"{onceListeners[i].Callback.Method.DeclaringType?.FullName}.{onceListeners[i].Callback.Method.Name}({sender}, {args})"; + EventHelpers.LogInvocationException(onceListeners[i].Callback.Target ?? sender, Logger, exception, methodCallRepresentation); } onceListeners.RemoveAt(i); } @@ -495,3 +489,12 @@ public class Event where TSender : class public delegate void EventHandler(TSender sender, TArguments args); private record struct ListenerData(EventHandler Callback, int Priority); } + +internal static class EventHelpers +{ + public static void LogInvocationException(object sender, ILogger logger, Exception exception, string methodCallRepresentation) + { + logger.LogException(sender, exception); + logger.LogError(sender, $"Unexpected exception on invocation of method {methodCallRepresentation}"); + } +}