public Func <int, IMessage, IMessage> Handle <T>(IList <T> messages) where T : IMessage { var sb = new StringBuilder($"Events published: [{string.Join(", ", messages.Select(x => x.PayloadType.Name))}]"); CurrentUnitOfWork.IfStarted(unitOfWork => { var message = unitOfWork.Message; if (message == null) { sb.Append(" while processing an operation not tied to an incoming message"); } else { sb.Append($" while processing a [{message.PayloadType.Name}]"); } var executionResult = unitOfWork.ExecutionResult; if (executionResult != null) { if (executionResult.IsFaulted && executionResult.Exception != null) { var exception = executionResult.Exception.GetBaseException(); exception = exception is ExecutionException ? exception.InnerException : exception; sb.Append($" which failed with a [{exception.GetType().Name}]"); } else if (executionResult.Status == TaskStatus.RanToCompletion) { sb.Append($" which yielded a [{executionResult.Result.GetType().Name}] return value"); } } }); _logger.LogInformation(sb.ToString()); return((i, m) => m); }
protected void RegisterWithUnitOfWork() { CurrentUnitOfWork.IfStarted(u => u.GetOrComputeResource("ManagedAggregates", k => new HashSet <AggregateLifecycle>()).Add(this)); }