private void AddGlobalInboxAttributesAsync(ref IOrderedEnumerable <RequestHandlerAttribute> preAttributes, RequestHandlerAsync <TRequest> implicitHandler) { if (_inboxConfiguration == null || implicitHandler.FindHandlerMethod().HasNoInboxAttributesInPipeline() || implicitHandler.FindHandlerMethod().HasExistingUseInboxAttributesInPipeline() ) { return; } var useInboxAttribute = new UseInboxAsyncAttribute( step: 0, contextKey: _inboxConfiguration.Context(implicitHandler.GetType()), onceOnly: _inboxConfiguration.OnceOnly, timing: HandlerTiming.Before, onceOnlyAction: _inboxConfiguration.ActionOnExists); PushOntoAttributeList(ref preAttributes, useInboxAttribute); }
private IHandleRequestsAsync <TRequest> BuildAsyncPipeline(RequestHandlerAsync <TRequest> implicitHandler, IRequestContext requestContext, bool continueOnCapturedContext) { if (implicitHandler is null) { throw new ArgumentNullException(nameof(implicitHandler)); } implicitHandler.Context = requestContext; implicitHandler.ContinueOnCapturedContext = continueOnCapturedContext; if (!_preAttributesMemento.TryGetValue(implicitHandler.Name.ToString(), out IOrderedEnumerable <RequestHandlerAttribute> preAttributes)) { preAttributes = implicitHandler.FindHandlerMethod() .GetOtherHandlersInPipeline() .Where(attribute => attribute.Timing == HandlerTiming.Before) .OrderByDescending(attribute => attribute.Step); AddGlobalInboxAttributesAsync(ref preAttributes, implicitHandler); _preAttributesMemento.TryAdd(implicitHandler.Name.ToString(), preAttributes); } AddGlobalInboxAttributesAsync(ref preAttributes, implicitHandler); var firstInPipeline = PushOntoAsyncPipeline(preAttributes, implicitHandler, requestContext, continueOnCapturedContext); if (!_postAttributesMemento.TryGetValue(implicitHandler.Name.ToString(), out IOrderedEnumerable <RequestHandlerAttribute> postAttributes)) { postAttributes = implicitHandler.FindHandlerMethod() .GetOtherHandlersInPipeline() .Where(attribute => attribute.Timing == HandlerTiming.After) .OrderByDescending(attribute => attribute.Step); } AppendToAsyncPipeline(postAttributes, implicitHandler, requestContext); s_logger.LogDebug("New async handler pipeline created: {0}", TracePipeline(firstInPipeline)); return(firstInPipeline); }
private IHandleRequestsAsync <TRequest> BuildAsyncPipeline(RequestHandlerAsync <TRequest> implicitHandler, IRequestContext requestContext, bool continueOnCapturedContext) { implicitHandler.Context = requestContext; implicitHandler.ContinueOnCapturedContext = continueOnCapturedContext; var preAttributes = implicitHandler.FindHandlerMethod() .GetOtherHandlersInPipeline() .Where(attribute => attribute.Timing == HandlerTiming.Before) .OrderByDescending(attribute => attribute.Step); var firstInPipeline = PushOntoAsyncPipeline(preAttributes, implicitHandler, requestContext, continueOnCapturedContext); var postAttributes = implicitHandler.FindHandlerMethod() .GetOtherHandlersInPipeline() .Where(attribute => attribute.Timing == HandlerTiming.After) .OrderByDescending(attribute => attribute.Step); AppendToAsyncPipeline(postAttributes, implicitHandler, requestContext); _logger.Value.DebugFormat("New async handler pipeline created: {0}", TracePipeline(firstInPipeline)); return(firstInPipeline); }