コード例 #1
0
        private MessageRegistration GetMessageRegistrationFor(ITransportLevelMessage message)
        {
            var registration = _messageHandlerRegistry.GetRegistrationFor(message.Type);

            if (registration == null)
            {
                throw new MissingMessageHandlerRegistrationException($"Error! A handler has not been registered for messages of type \"{message.Type}\". Message with id \"{message.MessageId}\" was not handled.");
            }

            return(registration);
        }
コード例 #2
0
        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);
            });
        }
コード例 #3
0
 public MessageResultBuilder WithTransportLevelMessage(string messageType)
 {
     _message = new TransportLevelMessageStub(type: messageType);
     return(this);
 }
コード例 #4
0
 public MessageResultBuilder WithTransportLevelMessage(ITransportLevelMessage message)
 {
     _message = message;
     return(this);
 }
コード例 #5
0
 public MessageResultBuilder()
 {
     _message  = new TransportLevelMessageStub(type: "foo");
     _onCommit = () => Task.CompletedTask;
 }
コード例 #6
0
ファイル: MessageResult.cs プロジェクト: martinosk/dafda
 public MessageResult(ITransportLevelMessage message, Func <Task> onCommit = null)
 {
     Message   = message;
     _onCommit = onCommit ?? EmptyCommitAction;
 }