public async Task ResolvesHandlersPolymorphically_ConcreteCaseWithFailedMessage() { var handlerActivator = _activationCtx.CreateActivator(handlers => handlers.Register <SecondLevelDeliveryHandler>()); using (var scope = new RebusTransactionScope()) { var headers = new Dictionary <string, string>(); var body = new FailedMessage(); var wrapper = new FailedMessageWrapper <FailedMessage>(headers, body, "bla bla", new Exception[0]); var handlers = (await handlerActivator.GetHandlers(wrapper, scope.TransactionContext)).ToList(); const string message = @"Expected that a single SecondLevelDeliveryHandler instance would have been returned because it implements IHandleMessages<IFailed<FailedMessage>> and we resolved handlers for a FailedMessageWrapper<FailedMessage>"; Assert.That(handlers.Count, Is.EqualTo(1), message); Assert.That(handlers[0], Is.TypeOf <SecondLevelDeliveryHandler>(), message); } }
public async Task CanGetFailedMessageHandler() { var headers = new Dictionary <string, string> { { Headers.MessageId, Guid.NewGuid().ToString() } }; var body = new SomeMessage(); var wrapper = new FailedMessageWrapper <SomeMessage>( headers: headers, message: body, errorDescription: "something went bad", exceptions: new[] { new Exception("oh noes!") } ); var handlerActivator = _activationCtx.CreateActivator(r => r.Register <SomeMessageHandler>()); Console.WriteLine(@" Resolving handlers for message created like this: var wrapper = new FailedMessageWrapper<SomeMessage>( headers: headers, message: body, errorDescription: ""something went bad"", exceptions: new[] {new Exception(""oh noes!"")} ); (this is a FailedMessageWrapper<>, which is the wrapper that will be dispatched when 2nd level retries are enabled, and the initial message has failed too many times) "); using (var scope = new FakeMessageContextScope()) { var handlers = (await handlerActivator.GetHandlers(wrapper, scope.TransactionContext)).ToList(); Assert.That(handlers.Count, Is.EqualTo(1), "Expected one single handler instance of type SomeMessageHandler"); Assert.That(handlers.First(), Is.TypeOf <SomeMessageHandler>()); } }