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); }
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); }
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); }