Exemplo n.º 1
0
        private IHandleRequests <TRequest> BuildPipeline(RequestHandler <TRequest> implicitHandler, IRequestContext requestContext)
        {
            implicitHandler.Context = requestContext;

            if (!_preAttributesMemento.TryGetValue(implicitHandler.Name.ToString(), out IOrderedEnumerable <RequestHandlerAttribute> preAttributes))
            {
                preAttributes =
                    implicitHandler.FindHandlerMethod()
                    .GetOtherHandlersInPipeline()
                    .Where(attribute => attribute.Timing == HandlerTiming.Before)
                    .OrderByDescending(attribute => attribute.Step);

                AddGlobalInboxAttributes(ref preAttributes, implicitHandler);

                _preAttributesMemento.TryAdd(implicitHandler.Name.ToString(), preAttributes);
            }

            var firstInPipeline = PushOntoPipeline(preAttributes, implicitHandler, requestContext);


            if (!_postAttributesMemento.TryGetValue(implicitHandler.Name.ToString(), out IOrderedEnumerable <RequestHandlerAttribute> postAttributes))
            {
                postAttributes =
                    implicitHandler.FindHandlerMethod()
                    .GetOtherHandlersInPipeline()
                    .Where(attribute => attribute.Timing == HandlerTiming.After)
                    .OrderByDescending(attribute => attribute.Step);
            }

            AppendToPipeline(postAttributes, implicitHandler, requestContext);
            _logger.Value.DebugFormat("New handler pipeline created: {0}", TracePipeline(firstInPipeline));
            return(firstInPipeline);
        }
Exemplo n.º 2
0
        private void AddGlobalInboxAttributes(ref IOrderedEnumerable <RequestHandlerAttribute> preAttributes, RequestHandler <TRequest> implicitHandler)
        {
            if (
                _inboxConfiguration == null ||
                implicitHandler.FindHandlerMethod().HasNoInboxAttributesInPipeline() ||
                implicitHandler.FindHandlerMethod().HasExistingUseInboxAttributesInPipeline()
                )
            {
                return;
            }

            var useInboxAttribute = new UseInboxAttribute(
                step: 0,
                contextKey: _inboxConfiguration.Context(implicitHandler.GetType()),
                onceOnly: _inboxConfiguration.OnceOnly,
                timing: HandlerTiming.Before,
                onceOnlyAction: _inboxConfiguration.ActionOnExists);

            PushOntoAttributeList(ref preAttributes, useInboxAttribute);
        }
Exemplo n.º 3
0
        private IHandleRequests <TRequest> BuildPipeline(RequestHandler <TRequest> implicitHandler, IRequestContext requestContext)
        {
            implicitHandler.Context = requestContext;

            var preAttributes =
                implicitHandler.FindHandlerMethod()
                .GetOtherHandlersInPipeline()
                .Where(attribute => attribute.Timing == HandlerTiming.Before)
                .OrderByDescending(attribute => attribute.Step);

            var firstInPipeline = PushOntoPipeline(preAttributes, implicitHandler, requestContext);

            var postAttributes =
                implicitHandler.FindHandlerMethod()
                .GetOtherHandlersInPipeline()
                .Where(attribute => attribute.Timing == HandlerTiming.After)
                .OrderByDescending(attribute => attribute.Step);

            AppendToPipeline(postAttributes, implicitHandler, requestContext);
            _logger.Value.DebugFormat("New handler pipeline created: {0}", TracePipeline(firstInPipeline));
            return(firstInPipeline);
        }