public async Task Dispatch(TransportLevelMessage message) { var registration = GetMessageRegistrationFor(message); var unitOfWork = _unitOfWorkFactory.CreateForHandlerType(registration.HandlerInstanceType); if (unitOfWork == null) { throw new UnableToResolveUnitOfWorkForHandlerException($"Error! Unable to create unit of work for handler type \"{registration.HandlerInstanceType.FullName}\"."); } var messageInstance = message.ReadDataAs(registration.MessageInstanceType); var context = new MessageHandlerContext(message.Metadata); await unitOfWork.Run(async handler => { if (handler == null) { throw new InvalidMessageHandlerException($"Error! Message handler of type \"{registration.HandlerInstanceType.FullName}\" not instantiated in unit of work and message instance type of \"{registration.MessageInstanceType}\" for message type \"{registration.MessageType}\" can therefor not be handled."); } // TODO -- verify that the handler is in fact an implementation of IMessageHandler<registration.MessageInstanceType> to provider sane error messages. await ExecuteHandler((dynamic)messageInstance, (dynamic)handler, context); }); }
public async Task Dispatch(ITransportLevelMessage message) { var registration = GetMessageRegistrationFor(message); var unitOfWork = _unitOfWorkFactory.CreateForHandlerType(registration.HandlerInstanceType); if (unitOfWork == null) { throw new UnableToResolveUnitOfWorkForHandlerException($"Error! Unable to create unit of work for handler type \"{registration.HandlerInstanceType.FullName}\"."); } var messageInstance = message.ReadDataAs(registration.MessageInstanceType); await unitOfWork.Run(async handler => { if (handler == null) { throw new InvalidMessageHandlerException($"Error! Message handler of type \"{registration.HandlerInstanceType.FullName}\" not instantiated in unit of work and message instance type of \"{registration.MessageInstanceType}\" for message type \"{registration.MessageType}\" can therefor not be handled."); } await ExecuteHandler((dynamic)messageInstance, (dynamic)handler); }); }