public async Task WrapsInvokersSoTheyCanRunInsideAnActivity() { var step = new IncomingDiagnosticsHandlerInvokerWrapper(); var headers = new Dictionary <string, string> { { Headers.Type, "MyType" } }; var transportMessage = new TransportMessage(headers, Array.Empty <byte>()); var message = new Message(headers, Array.Empty <byte>()); var innerInvoker = new TestInvoker(() => { }); var handlerInvokers = new HandlerInvokers(message, new[] { innerInvoker }); var scope = new RebusTransactionScope(); var context = new IncomingStepContext(transportMessage, scope.TransactionContext); context.Save(handlerInvokers); var callbackWasInvoked = false; await step.Process(context, () => { callbackWasInvoked = true; return(Task.CompletedTask); }); Assert.That(callbackWasInvoked); var updatedInvokers = context.Load <HandlerInvokers>(); Assert.That(updatedInvokers, Is.Not.SameAs(handlerInvokers)); Assert.That(updatedInvokers, Has.Exactly(1).Items.And.All.TypeOf <HandlerInvokerWrapper>()); }
/// <summary> /// Reorders the handler invokers if necessary /// </summary> public async Task Process(IncomingStepContext context, Func<Task> next) { var handlerInvokers = context.Load<HandlerInvokers>(); var orderedHandlerInvokers = handlerInvokers.OrderBy(i => _configuration.GetIndex(i.Handler)); var newHandlerInvokers = new HandlerInvokers(handlerInvokers.Message, orderedHandlerInvokers); context.Save(newHandlerInvokers); await next(); }
/// <summary> /// Reorders the handler invokers if necessary /// </summary> public async Task Process(IncomingStepContext context, Func <Task> next) { var handlerInvokers = context.Load <HandlerInvokers>(); var orderedHandlerInvokers = handlerInvokers.OrderBy(i => _configuration.GetIndex(i.Handler)); var newHandlerInvokers = new HandlerInvokers(orderedHandlerInvokers); context.Save(newHandlerInvokers); await next(); }
public Task Process(IncomingStepContext context, Func <Task> next) { var currentHandlerInvokers = context.Load <HandlerInvokers>(); var message = currentHandlerInvokers.Message; var messageType = message.GetMessageType(); var wrappedHandlerInvokers = currentHandlerInvokers .Select(invoker => new HandlerInvokerWrapper(invoker, messageType)); var updatedHandlerInvokers = new HandlerInvokers(message, wrappedHandlerInvokers); context.Save(updatedHandlerInvokers); return(next()); }
static IncomingStepContext GetIncomingStepContext(int number) { const string messageId = "some-id"; var headers = new Dictionary <string, string> { { Headers.MessageId, messageId }, { "number", (number % 20).ToString() } }; var transportMessage = new TransportMessage(headers, new byte[0]); var transactionContext = new TransactionContext(); var context = new IncomingStepContext(transportMessage, transactionContext); var message = new Message(headers, new object()); context.Save(message); var handlerInvokers = new HandlerInvokers(message, new[] { new HandlerInvoker <object>(messageId, async() => {}, new WhateverSaga(), transactionContext), }); context.Save(handlerInvokers); return(context); }