示例#1
0
 public InitializerPublishContextPipe(IMessageHeaderInitializer <TMessage, TInput>[] initializers, InitializeMessageContext <TMessage, TInput> context,
                                      IPipe <PublishContext> pipe)
 {
     _initializers = initializers;
     _sendPipe     = pipe;
     _context      = context;
 }
示例#2
0
        public async Task Publish(IPublishEndpoint endpoint, TInput input, IPipe <PublishContext <TMessage> > pipe, CancellationToken cancellationToken)
        {
            InitializeMessageContext <TMessage, TInput> messageContext = await InitializeMessage(input, cancellationToken).ConfigureAwait(false);

            await endpoint.Publish(messageContext.Message,
                                   _headerInitializers.Length > 0?new InitializerPublishContextPipe(_headerInitializers, messageContext, pipe) : pipe, cancellationToken);
        }
示例#3
0
 public InitializerSendContextPipe(IMessageHeaderInitializer <TMessage, TInput>[] initializers, InitializeMessageContext <TMessage, TInput> context,
                                   IPipe <SendContext <TMessage> > pipe)
 {
     _initializers = initializers;
     _pipe         = pipe;
     _context      = context;
 }
        public Task Apply(InitializeMessageContext <TMessage, TInput> context, SendContext <TMessage> sendContext)
        {
            var inputPropertyValue = _inputProperty.Get(context.Input);

            _headerProperty.Set(sendContext, inputPropertyValue);

            return(TaskUtil.Completed);
        }
        public InitializeMessageContext <TMessage> Create(InitializeMessageContext context)
        {
            var message = new TImplementation();

            var messageContext = new DynamicInitializeMessageContext <TMessage>(context, message);

            return(messageContext);
        }
示例#6
0
        async Task <InitializeMessageContext <TMessage, TInput> > InitializeMessage(TInput input, CancellationToken cancellationToken)
        {
            var context = new BaseInitializeMessageContext(typeof(TMessage), cancellationToken);

            InitializeMessageContext <TMessage> messageContext = _factory.Create(context);

            InitializeMessageContext <TMessage, TInput> inputContext = messageContext.CreateInputContext <TInput>(input);

            await Task.WhenAll(_initializers.Select(x => x.Apply(inputContext))).ConfigureAwait(false);

            return(inputContext);
        }
示例#7
0
        public Task Apply(InitializeMessageContext <TMessage, TInput> context)
        {
            var inputProperty = _inputProperty.Get(context.Input);

            if (_converter.TryConvert(inputProperty, out var messageProperty))
            {
                _messageProperty.Set(context.Message, messageProperty);
                return(TaskUtil.Completed);
            }

            throw new MassTransitException($"The input property {_inputProperty.Name} could not be converted to the message property {_messageProperty.Name}.");
        }
示例#8
0
        public async Task Send(ISendEndpoint endpoint, TInput input, IPipe <SendContext> pipe, CancellationToken cancellationToken)
        {
            InitializeMessageContext <TMessage, TInput> messageContext = await InitializeMessage(input, cancellationToken).ConfigureAwait(false);

            if (_headerInitializers.Length > 0)
            {
                await endpoint.Send(messageContext.Message, new InitializerSendContextPipe(_headerInitializers, messageContext, pipe), cancellationToken)
                .ConfigureAwait(false);
            }
            else
            {
                await endpoint.Send(messageContext.Message, pipe, cancellationToken).ConfigureAwait(false);
            }
        }
示例#9
0
 public Task Apply(InitializeMessageContext <TMessage, TInput> context, SendContext <TMessage> sendContext)
 {
     return(_initializer.Apply(context, sendContext));
 }
 public DynamicInitializeMessageContext(InitializeMessageContext context, TMessage message)
 {
     _context = context;
     Message  = message;
 }
示例#11
0
        public Task Apply(InitializeMessageContext <TMessage, TInput> context)
        {
            _messageProperty.Set(context.Message, _inputProperty.Get(context.Input));

            return(TaskUtil.Completed);
        }