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