コード例 #1
0
        public async Task <TResult> HandleAsync(TQuery query)
        {
            TResult retVal;
            var     attribute = (TransactionQueryAttribute)TypeDescriptor.GetAttributes(query)[typeof(TransactionQueryAttribute)];

            if (attribute != null)
            {
                TransactionScopeOption?transactionScopeOption = TransactionManager.GetTransactionScopeFromObject <IQueryWithTransactionScopeOptionOverride <TResult> >(query) ?? attribute.TransactionScopeOption;
                IsolationLevel?        isolationLevel         = TransactionManager.GetIsolationLevelFromObject <IQueryWithTransactionIsolationLevelOverride <TResult> >(query) ?? attribute.IsolationLevel;

                using (var transactionScope = TransactionManager.CreateTransactionScope(transactionScopeOption, isolationLevel))
                {
                    TransactionManager.LogTransactionStarting(_logger, query);

                    retVal = await DecoratedQueryHandler.HandleAsync(query);

                    transactionScope.Complete();

                    TransactionManager.LogTransactionComplete(_logger, query);
                }
            }
            else
            {
                retVal = await DecoratedQueryHandler.HandleAsync(query);
            }

            return(retVal);
        }
コード例 #2
0
        public async Task <TResult> HandleAsync(TQuery query)
        {
            var stopWatch = Stopwatch.StartNew();

            _logger.LogInformation(string.Format("{0} Started", query.GetType().Name));

            var response = await DecoratedQueryHandler.HandleAsync(query);

            stopWatch.Stop();

            var originalLogInfo = query.ToLog();

            var formattedTime = string.Format("{0:mm\\:ss\\:fff}", stopWatch.Elapsed);
            var template      = formattedTime + " {QueryName} - " + originalLogInfo.LogMessageTemplate;

            var properties = new List <object> {
                query.GetType().Name
            };

            properties.AddRange(originalLogInfo.LogMessageParameters);

            _logger.LogInformation(template, properties.ToArray());

            return(response);
        }
コード例 #3
0
        public async Task <TResult> HandleAsync(TQuery query)
        {
            try
            {
                return(await DecoratedQueryHandler.HandleAsync(query));
            }
            catch (Exception ex)
            {
                _logger.LogError(LogEvent.QueryHandlying, ex, query.ToLog().ToString());

                throw new QueryHandlerException <TQuery, TResult>("QueryHandlerException: " + query, ex, query);
            }
        }