private async Task <bool> ProcessMessageAsync <TMessageContext>( MessageHandler handler, MessageReceiver messageReceiver, string message, TMessageContext messageContext, MessageCorrelationInfo correlationInfo, CancellationToken cancellationToken) where TMessageContext : AzureServiceBusMessageContext { bool canProcessMessage = handler.CanProcessMessage(messageContext); var messageType = (Type)handler.GetType().GetProperty("MessageType", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(handler); bool tryDeserializeToMessageFormat = TryDeserializeToMessageFormat(message, messageType, out var result); if (canProcessMessage && tryDeserializeToMessageFormat) { if (result is null) { return(false); } await PreProcessingAsync(handler, messageContext, messageReceiver); await handler.ProcessMessageAsync(result, messageContext, correlationInfo, cancellationToken); return(true); } return(false); }
public void CustomMessageHandlerConstructor_WithContextFilterObsolete_SubtractsRegistration(bool matchesContext) { // Arrange var collection = new MessageHandlerCollection(new ServiceCollection()); collection.WithMessageHandler <TestMessageHandler, TestMessage, TestMessageContext>((TestMessageContext messageContext) => matchesContext); ServiceProvider serviceProvider = collection.Services.BuildServiceProvider(); // Act IEnumerable <MessageHandler> messageHandlers = MessageHandler.SubtractFrom(serviceProvider, _logger); // Assert MessageHandler messageHandler = Assert.Single(messageHandlers); Assert.NotNull(messageHandler); var context = TestMessageContext.Generate(); Assert.Equal(matchesContext, messageHandler.CanProcessMessage(messageContext: context)); }
public void CustomMessageHandlerFactory_WithDefaultContextFilterObsolete_SubtractsRegistration(bool matchesContext) { // Arrange var collection = new MessageHandlerCollection(new ServiceCollection()); var spyHandler = new DefaultTestMessageHandler(); collection.WithMessageHandler <DefaultTestMessageHandler, TestMessage>( (MessageContext messageContext) => matchesContext, provider => spyHandler); ServiceProvider serviceProvider = collection.Services.BuildServiceProvider(); // Act IEnumerable <MessageHandler> messageHandlers = MessageHandler.SubtractFrom(serviceProvider, _logger); // Assert MessageHandler messageHandler = Assert.Single(messageHandlers); Assert.NotNull(messageHandler); var context = new MessageContext("message-id", new Dictionary <string, object>()); Assert.Equal(matchesContext, messageHandler.CanProcessMessage(messageContext: context)); }