예제 #1
0
        public void Can_run_query_from_raw_message()
        {
            // Arrange
            pipelineService.ServiceProvider = new FuncServiceProvider(InterfacesResolver);
            SetupQueryPipeline(pipelineService.PipelineContainer.AddQueryPipeline());
            var messageRecord = new MessageRecord
            {
                ContentType = "Saritasa.Tools.Messages.Tests.QueriesTests+QueryObject.SimpleQueryWithDependency," +
                              "Saritasa.Tools.Messages.Tests",
                Content = new Dictionary <string, object>
                {
                    ["a"]           = 10,
                    ["b"]           = 20,
                    ["dependencyB"] = null,
                }
            };

            // Act
            var queryPipeline  = pipelineService.GetPipelineOfType <IQueryPipeline>();
            var queryConverter = pipelineService.GetPipelineOfType <IQueryPipeline>() as IMessageRecordConverter;
            var messageContext = queryConverter.CreateMessageContext(pipelineService, messageRecord);

            queryPipeline.Invoke(messageContext);

            // Assert
            Assert.IsType <List <int> >(messageContext.GetResult <object>());
        }
        /// <summary>
        /// Query.
        /// </summary>
        /// <typeparam name="TQuery">Query type.</typeparam>
        /// <param name="pipelineService">Pipelines service.</param>
        /// <param name="obj">Query object to execute by.</param>
        /// <returns>Query caller.</returns>
        public static IQueryCaller <TQuery> Query <TQuery>(this IMessagePipelineService pipelineService,
                                                           TQuery obj) where TQuery : class
        {
            var pipeline = pipelineService.GetPipelineOfType <IQueryPipeline>();

            return(pipeline.Query <TQuery>(pipelineService, obj));
        }
 /// <summary>
 /// Raise event.
 /// </summary>
 /// <param name="pipelineService">Pipeline service.</param>
 /// <param name="event">Event to process.</param>
 /// <param name="cancellationToken">The token to monitor for cancellation requests.</param>
 public static async Task RaiseEventAsync(this IMessagePipelineService pipelineService, object @event,
                                          CancellationToken cancellationToken = default(CancellationToken))
 {
     var eventPipeline  = pipelineService.GetPipelineOfType <IEventPipeline>();
     var messageContext = eventPipeline.CreateMessageContext(pipelineService, @event);
     await eventPipeline.InvokeAsync(messageContext, cancellationToken);
 }
        /// <summary>
        /// Raise event.
        /// </summary>
        /// <param name="pipelineService">Pipeline service.</param>
        /// <param name="event">Event to process.</param>
        public static void RaiseEvent(this IMessagePipelineService pipelineService, object @event)
        {
            var eventPipeline  = pipelineService.GetPipelineOfType <IEventPipeline>();
            var messageContext = eventPipeline.CreateMessageContext(pipelineService, @event);

            eventPipeline.Invoke(messageContext);
        }
        /// <summary>
        /// Handle command within message context.
        /// </summary>
        /// <param name="pipelineService">Pipelines service.</param>
        /// <param name="command">Command to execute.</param>
        /// <returns>Message context used in execution.</returns>
        public static IMessageContext HandleCommand(this IMessagePipelineService pipelineService, object command)
        {
            var pipeline       = pipelineService.GetPipelineOfType <ICommandPipeline>();
            var messageContext = pipeline.CreateMessageContext(pipelineService, command);

            pipeline.Invoke(messageContext);
            return(messageContext);
        }
        /// <summary>
        /// Handle command within message context.
        /// </summary>
        /// <param name="pipelineService">Pipelines service.</param>
        /// <param name="command">Command to execute.</param>
        /// <param name="cancellationToken">The token to monitor for cancellation requests.</param>
        /// <returns>Message context used in execution.</returns>
        public static async Task <IMessageContext> HandleCommandAsync(this IMessagePipelineService pipelineService,
                                                                      object command,
                                                                      CancellationToken cancellationToken = default(CancellationToken))
        {
            var commandPipeline = pipelineService.GetPipelineOfType <ICommandPipeline>();
            var messageContext  = commandPipeline.CreateMessageContext(pipelineService, command);
            await commandPipeline.InvokeAsync(messageContext, cancellationToken);

            return(messageContext);
        }