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);
        }
예제 #2
0
 protected void RegisterWithUnitOfWork()
 {
     CurrentUnitOfWork.IfStarted(u => u.GetOrComputeResource("ManagedAggregates", k => new HashSet <AggregateLifecycle>()).Add(this));
 }