public object ApplyTo(MethodInvocationInfo invocation) { var workContext = WorkContextProvider.CurrentContext; if (!workContext.IsUnitOfWorkRunning) { throw new UnitOfWorkViolationException( string.Format("{0} should be called within an active Unit Of Work.", invocation.Method.FullFriendlyName())); } var unitOfWorkInfo = workContext.CurrentUnitOfWork.Info; var type = invocation.Method.ReflectedType; if (!unitOfWorkInfo.IsTransactional) { var baseType = transactionalMethodsByType.Keys .SingleOrDefault(x => x.IsGenericTypeDefinition ? x.GenericDefinitionIsAssignableFrom(type) : x.IsAssignableFrom(type)); if (baseType != null && transactionalMethodsByType[baseType].Contains(invocation.Method.Name)) { throw new UnitOfWorkViolationException( string.Format("{0} should be called within an active transactional Unit Of Work.", invocation.Method.FullFriendlyName())); } } return(invocation.Proceed()); }
public object ApplyTo(MethodInvocationInfo invocation) { if (!PersistenceContext.IsSessionOpened) { throw new InvalidOperationException( string.Format("{0} should be called within an open persistence session.", invocation.Method.FullFriendlyName())); } return(invocation.Proceed()); }
/// <summary> /// Invocation of the interceptor /// </summary> /// <param name = "invocation">The invocation info.</param> /// <returns>return value of the invoked method</returns> public object ApplyTo(MethodInvocationInfo invocation) { object result; // Logging Starting Method if (Log.IsDebugEnabled) { LogStartDebug(invocation); } else if (Log.IsInfoEnabled) { LogStartInfo(invocation); } // Invoke Method try { result = invocation.Proceed(); } catch (Exception ex) { // Logging Error LogError(invocation, ex.GetBaseException()); throw; } // Logging Ending Method if (Log.IsDebugEnabled) { LogEndDebug(invocation, result); } else if (Log.IsInfoEnabled) { LogEndInfo(invocation); } return(result); }
/// <summary> /// Invocation of the interceptor /// </summary> /// <param name = "invocation">The invocation info.</param> /// <returns>return value of the invoked method</returns> public object ApplyTo(MethodInvocationInfo invocation) { object result; var attributes = invocation.Method.GetCustomAttributes(typeof(IAuditAttribute), true); Audit audit = null; ActionsEnum?actionType = null; Type type = null; if (attributes.Length > 0) { audit = GetNewAudit(); var auditAttribute = (IAuditAttribute)attributes[0]; if (auditAttribute.BehaviorType != default(ActionsEnum)) { audit.Action = (int)auditAttribute.BehaviorType; AuditContextManager.SetAction(auditAttribute.BehaviorType); actionType = auditAttribute.BehaviorType; } if (auditAttribute.EntityType != null) { audit.EntityType = auditAttribute.EntityType.Name; AuditContextManager.SetEntityType(auditAttribute.EntityType); type = auditAttribute.EntityType; } var entityIdParameterName = auditAttribute.IdField; if (!string.IsNullOrEmpty(entityIdParameterName)) { var parameters = invocation.Method.GetParameters(); for (int i = 0; i < parameters.Length; i++) { var parameterInfo = parameters[i]; if (parameterInfo.Name == entityIdParameterName) { audit.EntityId = (int)invocation.Arguments[i]; } } } } result = invocation.Proceed(); var auditContext = AuditContextManager.Context; if (!auditContext.Cancelled) { if (AuditContextManager.Context != null && auditContext.ContextData.Count > 0) { if (audit == null) { audit = GetNewAudit(); } var contextData = auditContext.ContextData[0]; UpdateAudit(audit, contextData); if (contextData.Action != default(ActionsEnum)) { actionType = contextData.Action; } if (contextData.EntityType != null) { type = contextData.EntityType; } } Audits.Put(audit); if (AuditContextManager.Context != null && auditContext.ContextData.Count > 1) { for (int i = 1; i < auditContext.ContextData.Count; i++) { var contextData = auditContext.ContextData[i]; var extraAudit = new Audit(AuthenticationProvider.GetLoggedUser()); extraAudit.Date = audit.Date; UpdateAudit(extraAudit, contextData); Audits.Put(extraAudit); } } } if (actionType.HasValue && type != null && AuditContextManager.Context != null && auditContext.ContextData.Count > 0 && auditContext.ContextData[0].Displayable != null) { if (actionType == ActionsEnum.Create) { NotificationService.SendCreatedNotificationFor(type, auditContext.ContextData[0].Displayable.ToDisplay()); } if (actionType == ActionsEnum.Edit) { NotificationService.SendUpdatedNotificationFor(type, auditContext.ContextData[0].Displayable.ToDisplay(), audit.EntityId); } if (actionType == ActionsEnum.Delete) { NotificationService.SendDeletedNotificationFor(type, auditContext.ContextData[0].Displayable.ToDisplay(), audit.EntityId); } } return(result); }
/// <summary> /// Execute the Command. /// </summary> /// <returns></returns> public Object Execute() { return(invocationInfo.Proceed()); }