示例#1
0
        private async Task <TResponse> DoRequestAsync <TRequest, TResponse>(IDomainRequest <TRequest, TResponse> request, ILifetimeScope lifetimeScope)
            where TRequest : IDomainRequest <TRequest, TResponse>
            where TResponse : IDomainResponse
        {
            var foundHandlers = GetRequestHandlers(request.GetType()).ToList();

            if (foundHandlers.Any())
            {
                foreach (var handler in foundHandlers)
                {
                    var response = ExecuteRequestHandler(request, handler, lifetimeScope);
                    if (response != null)
                    {
                        return(response);
                    }
                }
            }

            foundHandlers = GetAsyncEventHandlers(request.GetType()).ToList();
            if (foundHandlers.Any())
            {
                foreach (var handler in foundHandlers)
                {
                    var response = await ExecuteRequestHandlerAsync(request, handler, lifetimeScope).ConfigureAwait(continueOnCapturedContext: false);

                    if (response != null)
                    {
                        return(response);
                    }
                }
            }

            return(default(TResponse));
        }
示例#2
0
        private static TResponse CallRequestHandler <TRequest, TResponse>(IDomainRequest <TRequest, TResponse> request, Type handlerType, ILifetimeScope lifetimeScope)
            where TRequest : IDomainRequest <TRequest, TResponse>
            where TResponse : IDomainResponse
        {
            var handler = (dynamic)lifetimeScope.Resolve(handlerType);

            return(handler.Handle((dynamic)request));
        }
示例#3
0
 public async Task <TResponse> RequestAsync <TRequest, TResponse>(IDomainRequest <TRequest, TResponse> request)
     where TRequest : IDomainRequest <TRequest, TResponse>
     where TResponse : IDomainResponse
 {
     if (_childScopeBehaviour == MessagePublishingChildScopeBehaviour.ChildScopePerMessage)
     {
         using (var childLifetimeScope = _lifetimeScope.BeginLifetimeScope())
         {
             return(await DoRequestAsync(request, childLifetimeScope).ConfigureAwait(continueOnCapturedContext: false));
         }
     }
     else
     {
         return(await DoRequestAsync(request, _lifetimeScope).ConfigureAwait(continueOnCapturedContext: false));
     }
 }
示例#4
0
 private TResponse ExecuteRequestHandler <TRequest, TResponse>(IDomainRequest <TRequest, TResponse> request, Type handlerType, ILifetimeScope lifetimeScope)
     where TRequest : IDomainRequest <TRequest, TResponse>
     where TResponse : IDomainResponse
 {
     if (_childScopeBehaviour == MessagePublishingChildScopeBehaviour.ChildScopePerHandler)
     {
         using (var childLifetimeScope = _lifetimeScope.BeginLifetimeScope())
         {
             return(CallRequestHandler(request, handlerType, childLifetimeScope));
         }
     }
     else
     {
         return(CallRequestHandler(request, handlerType, lifetimeScope));
     }
 }
示例#5
0
 public Task <IEnumerable <TResponse> > MulticastRequestAsync <TRequest, TResponse>(IDomainRequest <TRequest, TResponse> request)
     where TRequest : IDomainRequest <TRequest, TResponse>
     where TResponse : IDomainResponse
 {
     return(_requestBroker.MulticastRequestAsync(request));
 }
示例#6
0
 public Task <TResponse> RequestAsync <TRequest, TResponse>(IDomainRequest <TRequest, TResponse> request)
     where TRequest : IDomainRequest <TRequest, TResponse>
     where TResponse : IDomainResponse
 {
     return(_requestBroker.RequestAsync(request));
 }
示例#7
0
 public static async Task <IDomainResponse> DispatchAsync(IDomainRequest request)
 {
     return(await Task.Run(() => Dispatch(request)));;
 }
示例#8
0
 public static IDomainResponse Dispatch(IDomainRequest request)
 {
     return(_Handlers[request.GetType()](request));
 }
示例#9
0
 public static async Task <T> DispatchAsync <T>(IDomainRequest request) where T : IDomainResponse
 {
     return(await Task.Run(() => Dispatch <T>(request)));;
 }
示例#10
0
 public static T Dispatch <T>(IDomainRequest request) where T : IDomainResponse
 {
     return((T)_Handlers[request.GetType()](request));
 }
示例#11
0
        private static async Task <TResponse> CallRequestHandlerAsync <TRequest, TResponse>(IDomainRequest <TRequest, TResponse> request, Type handlerType, ILifetimeScope lifetimeScope)
            where TRequest : IDomainRequest <TRequest, TResponse>
            where TResponse : IDomainResponse
        {
            var handler = (dynamic)lifetimeScope.Resolve(handlerType);

            return(await handler.HandleAsync((dynamic)request).ConfigureAwait(continueOnCapturedContext: false));
        }
示例#12
0
 private async Task <TResponse> ExecuteRequestHandlerAsync <TRequest, TResponse>(IDomainRequest <TRequest, TResponse> request, Type handlerType, ILifetimeScope lifetimeScope)
     where TRequest : IDomainRequest <TRequest, TResponse>
     where TResponse : IDomainResponse
 {
     if (_childScopeBehaviour == MessagePublishingChildScopeBehaviour.ChildScopePerHandler)
     {
         using (var childLifetimeScope = _lifetimeScope.BeginLifetimeScope())
         {
             return(await CallRequestHandlerAsync(request, handlerType, childLifetimeScope).ConfigureAwait(continueOnCapturedContext: false));
         }
     }
     else
     {
         return(await CallRequestHandlerAsync(request, handlerType, lifetimeScope).ConfigureAwait(continueOnCapturedContext: false));
     }
 }
示例#13
0
        public async Task <IEnumerable <TResponse> > DoMulticastRequestAsync <TRequest, TResponse>(IDomainRequest <TRequest, TResponse> request, ILifetimeScope lifetimeScope)
            where TRequest : IDomainRequest <TRequest, TResponse>
            where TResponse : IDomainResponse
        {
            var responses     = new List <TResponse>();
            var foundHandlers = GetRequestHandlers(request.GetType()).ToList();

            if (foundHandlers.Any())
            {
                foreach (var handler in foundHandlers)
                {
                    var response = ExecuteRequestHandler(request, handler, lifetimeScope);
                    if (response != null)
                    {
                        responses.Add(response);
                    }
                }
            }

            foundHandlers = GetAsyncEventHandlers(request.GetType()).ToList();
            if (foundHandlers.Any())
            {
                foreach (var handler in foundHandlers)
                {
                    var response = await ExecuteRequestHandlerAsync(request, handler, lifetimeScope).ConfigureAwait(continueOnCapturedContext: false);

                    if (response != null)
                    {
                        responses.Add(response);
                    }
                }
            }

            return(responses);
        }